Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Ну, в двухста файлах в одной папке тоже ничего хорошего. А группировать их не всегда удобно, иногда важно чтобы классы оставались в одном пространстве имен, а после переноса файлов в другую папку IDE будет активно мешать этому.
Лично я предпочитаю создавать отдельный файл на класс если в этом классе более 7 строк кода.
Что имеете ввиду под цепочками?
commandBinder.Bind(GameEvent.HIT).To<DestroyEnemyCommand>().To<UpdateScoreCommand>();
commandBinder.Bind(GameEvent.HIT).InSequence()
.To<CheckLevelClearedCommand>()
.To<EndLevelCommand>()
.To<GameOverCommand>();
injectionBinder.Bind<ICommandBinder>().To<SignalCommandBinder>().ToSingleton(); // сигналы - новые, строго типизированные события.
файле на тысячи строк
commandBinder.Bind(GameEvent.HIT).To<DestroyEnemyCommand>().To<UpdateScoreCommand>();
commandBinder.Bind(GameEvent.HIT).To<DestroyEnemyCommand>().Once();
commandBinder.Bind(GameEvent.HIT).InSequence()
.To<CheckLevelClearedCommand>()
.To<EndLevelCommand>()
.To<GameOverCommand>();
commandBinder.Bind<ShipDestroyedSignal>().To<ShipDestroyedCommand>(); // сигналы - новые, строго типизированные события.
Вызов одной команды из другой это явно плохая практика
Это должно проделываться в Composition Root.
commandBinder.Bind<ShipDestroyedSignal>().To<ShipDestroyedCommand>(); // сигналы - новые, строго типизированные события.
public void On(ShipDestroyedCommand ev) {
}
Но создавать файл для каждой функции, еще и в 1-5 строк
Я не представляю как выглядел мой проект, если бы каждый метод я выносил бы в отдельный класс
в StrangeIOC команды могут быть асинхронными, в этом случае они конечно упрощают жизнь
Почему?
Я в игре могу подвесится прям на команды как на события. И тоже строготипизированно. Выглядит как-то так:
Чем упрощают? Что для вас «асинхронные» в данном контексте?)
public enum Status {
Success,
RoomNotEmpty,
NotEnoughItems,
CrewMemberIsFreezed
}
public abstract class Command
{
public Core Core { get; private set; }
public bool IsValid { get; private set; }
public Status Status { get; private set; }
public Command Execute (Core core)
{
Core = core;
Status = Run();
IsValid = (Status == Status.Success);
return this;
}
protected abstract Status Run ();
}
protected override Status Run ()
{
if (Room.Building.Type != BuildingType.Empty) {
return Status.RoomNotEmpty;
}
if (Building.Type == BuildingType.Empty) {
return Status.CantBuildEmpty;
}
if (!new Pay(Building.Config.ConstructionCost).Execute(Core).IsValid) {
return Status.NotEnoughResources;
}
Room.Building = Building;
return Status.Success;
}
вьюшка не позволяет запустить команду, которая может вернуть false
Это означает, что у вас бизнес-логика дублируется… Нарушение принципа DRY.
Пишем игровую логику на C#. Часть 2/2