Вы должны определенно ввести некоторое разделение проблем, делая вещи в разных слоях. Непосредственная ссылка на базу данных из пользовательского интерфейса не является звуковой архитектурой и приведет к жесткой связи и трудностям в обслуживании и расширении позже.
Лучшее время для этого разделения - это начало, когда нет затрат на рефакторинг, но если вы ожидаете расширения продукта, то сейчас это также принесет значительные преимущества с точки зрения расширяемости и обслуживания.
Here - это подход к внедрению уровня обслуживания, который остается на вершине модели и предоставляет ту же функциональность, которая повторно используется несколькими пользовательскими интерфейсами и шлюзами. Этот уровень помогает объединить вашу бизнес-логику во всех ваших интерфейсах и всех открытых сервисах (если вам когда-либо понадобится раскрывать функциональность/данные), что очень важно - вы определенно не хотите создавать и изменять вещи в нескольких местах, когда вы можете сделать он в одном месте и гарантирует 100% консистенцию.
Что касается части вопроса о физически реализующей логики в другой библиотеке DLL, я думаю, что это не так уж важно и нужно - вы будете иметь наиболее важные преимущества использования отдельных слоев, не имея физически разделить их. Возможно, это будет иметь смысл, если вы планируете расширять масштабы, и вы думаете, что наличие нескольких экземпляров одного и того же уровня на нескольких машинах решит вашу проблему (например, с помощью какого-то подхода к балансировке нагрузки), но в остальном я не думаю, что это является обязательным для этого.
Удачи вам!
Просьба пояснить. Что вы понимаете под слоем данных. У вас есть модель данных и отдельный слой данных? Как существующая логика интегрирована в слой данных - есть ли у вас хранимые процедуры? –
К сожалению, на уровне данных я имел в виду уровень доступа к данным. Мы используем Linq для Sql и имеем всю нашу бизнес-логику в классах расширения. – drizzie