Я хотел бы попросить ваши предложения, мнения и передовые методы, которые вы используете для создания приложений.
Всегда абстрагируйте реализацию доступа к данным от бизнес-уровня. Укажите договор, используя старый добрый C # интерфейс ; тогда вы можете иметь несколько реализаций - любые неудачные технологические решения сводятся к минимуму, поскольку вы можете реализовать их с помощью чего-то другого. Другие могут также разработать свою собственную реализацию, если они действительно этого хотят (решение является более расширяемым), и его проще тестировать.
Мне нравятся те слои, которые у вас есть - как указывает Зихотки, вы можете потерять пару; до тех пор, пока у вас есть отдельные уровни бизнес-логики пользовательского интерфейса и доступ к абстрактным данным, я был бы счастлив.
Вы бы добавили или удалили какой-либо из перечисленных слоев? Какие технологии вы предпочитаете?
Я не могу говорить о специфике, но это зависит от того, что вы хотите сделать, и кто будет работать над системой, например: это будет с открытым исходным кодом? Если ваша клиентская база включает разработчиков, вам нужно оценить, чего они могут хотеть, и сбалансировать это с вашими другими потребностями. Я думаю, что ваш список в порядке. Я бы не стал использовать NHibernate, поскольку у меня не было никакого опыта работы с ним, но это больше основано на личной истории, чем на доказательствах.
Если вы рассматриваете инструменты ORM (например, NHibernate), я советую вам рассмотреть LightSpeed , мои друзья (которых я уважаю) ОЧЕНЬ высоко ценят это.
Итак, первый вопрос - использовать хранимые процедуры и триггеры или нет?
Я бы настоятельно рекомендовал использовать SP, особенно в веб-средах, поскольку (все сделано правильно) они предлагают более высокий уровень защиты от атак SQL-инъекций.
Кроме того, то, что вы используете SP, не означает, что в них есть бизнес-логика.
Триггеры - что они делают? Надеюсь, ничего «бизнес-логика» не связано:)
Бизнес-объекты, которые строят бизнес-модель. Я бы положил здесь все бизнес-правила и проверки. Но нужен ли этот слой? Или вы бы поместили все деловые вещи в слой 3?
Как вы, наверное, уже разобрались, я твердо верю, что вся бизнес-логика должна быть на бизнес-уровне, она будет более пригодна для повторного использования, и преимущества согласованности должны быть очевидны:)