Разработать слои, прежде всего имея в виду переход к принципу инверсии зависимости и инверсии управления на более позднем этапе?
У меня есть базовое приложение, которое будет развиваться. Прямо сейчас пользовательский интерфейс включает в себя BLL. DAL - это отдельная библиотека, которая служит своей цели.
У меня нет времени, чтобы сделать все прямо сейчас, поэтому я хочу обойти шаблоны, которые помогают с развязкой (IoC, DI, как мне было предложено здесь).
Я хотел бы создать свой BLL и иметь ссылку на DAL напрямую. Это даст мне возможность начать создавать отдельные интерфейсы, которые мне нужны сейчас.
Мой вопрос: могу ли я это сделать? Могу ли я сосредоточиться сейчас на создании своих 3-х слоев и постепенно применять шаблоны проектирования, чтобы сделать мой код лучше?
Добавленная информация:
У меня есть роскошь того времени, потому что мое первое приложение не будет использоваться во время разработки второго. Так что у меня будет время оптимизировать мою структуру кодирования. Вопрос, что я могу сделать, чтобы разбить UI на UI + BLL настолько эффективно, насколько я могу. Я думаю, что я просто перенесу инициализацию DAL в BLL и вставлю в пользовательский интерфейс инициал BLL. Есть ли что-то еще, что я могу сделать, чтобы это больше помогло мне при применении IoC/DI позже?
3 ответа
Вы можете настроить "инъекцию зависимости бедняка", используя такую структуру:
public class MyEndClass
{
private readonly IDependency dependency;
public MyEndClass(IDependency dependency)
{
this.dependency = dependency;
}
// temporary constructor until we introduce IoC
public MyEndClass() : this(new Dependency())
{
}
}
Быстрое получение рабочего продукта часто может быть самой важной вещью, поэтому правильное решение об отказе от некоторых технических приемов может быть правильным.
Тем не менее, вы должны убедиться, что вы делаете правильный компромисс. Рефакторинг не является бесплатным и необходимо планировать работу с техническим долгом.
Путь наименьшего сопротивления после того, как конечные пользователи увидят вашу первоначальную версию, обычно заключается в том, чтобы продолжать добавлять функциональность к пересмотру первоначальных проектных решений.
Иными словами, когда версия 1.0 выйдет в дикую природу, вам придется усердно убеждать руководство, что вам нужно потратить большое количество человеко-дней, дорабатывая вещи под капотом, без ощутимых изменений или выгоды для клиента.
Не зная деталей вашего приложения или требований, невозможно дать конкретный совет. В общем, хотя потратить некоторое время на предварительные размышления о дизайне на несколько порядков быстрее и проще, чем пытаться сделать то же самое каким-то образом в процессе разработки.
Мне очень нравится метафора "долг" в этом случае. Чем быстрее вы начнете предлагать свою первую рабочую версию и будете идти на компромисс в отношении качества кода и передовых методов проектирования, тем дольше и сложнее будет реализовывать любые новые запросы на изменение.
Вы сами решаете, сколько "в долг" вы хотите получить. Подумайте, что создание продукта с нуля - это уникальная возможность продемонстрировать свои качества, если вы поставите его в течение, скажем, одного месяца, но вам потребуется пять месяцев для выполнения нескольких простых запросов на изменение, пострадают ваш авторитет и репутация, и они заменят вас.