Мне действительно нужно увидеть честную, продуманную дискуссию по существу принятой в настоящее время концепции корпоративного приложения.
Я не уверен, что объекты сущности должны существовать.
Объектами сущности я имею в виду типичные вещи, которые мы склонны строить для наших приложений, таких как "Лицо", "Учетная запись", "Заказ" и т.д.
Моя нынешняя философия дизайна такова:
- Все доступ к базе данных должен выполняться с помощью хранимых процедур.
- Всякий раз, когда вам нужны данные, вызывайте хранимую процедуру и итерации по SqlDataReader или строкам в DataTable
(Примечание. Я также создал корпоративные приложения с Java EE, java-люди, пожалуйста, замените equvalent для моих .NET-примеров)
Я не против OO. Я пишу много классов для разных целей, просто не сущностей. Я признаю, что большая часть классов, которые я пишу, является статическими вспомогательными классами.
Я не строю игрушки. Я говорю о крупных транзакционных приложениях большого объема, развернутых на нескольких компьютерах. Веб-приложения, службы Windows, веб-службы, взаимодействие b2b, вы называете это.
Я использовал OR Mappers. Я написал несколько. Я использовал стек Java EE, CSLA и несколько других эквивалентов. Я не только использовал их, но и активно разрабатывал и поддерживал эти приложения в производственных средах.
Я пришел к проверенному на битву выводу, что объекты объекта становятся на нашем пути, и наша жизнь будет намного проще без них.
Рассмотрим этот простой пример: вы получаете сообщение о поддержке определенной страницы вашего приложения, которая работает некорректно, возможно, одно из полей не сохраняется, как должно быть. С моей моделью разработчик, назначенный для поиска проблемы, открывает ровно 3 файла. ASPX, ASPX.CS и SQL файл с хранимой процедурой. Проблема, которая может быть недостающим параметром для вызова хранимой процедуры, требует минут. Но с любой моделью сущностей вы всегда будете запускать отладчик, начинаете переходить через код, и вы можете в итоге получить 15-20 файлов, открытых в Visual Studio. К тому моменту, когда вы переходите к нижней части стека, вы забыли, с чего вы начали. Мы можем только держать так много вещей в наших головах одновременно. Программное обеспечение невероятно сложно, не добавляя лишних слоев.
Сложность разработки и устранение неполадок - это только одна сторона моей проблемы.
Теперь расскажите о масштабируемости.
Разве разработчики понимают, что каждый раз, когда они пишут или модифицируют какой-либо код, который взаимодействует с базой данных, им необходимо провести тщательный анализ точного воздействия на базу данных? И не только копия разработки, я имею в виду имитацию производства, поэтому вы можете видеть, что дополнительный столбец, который вам нужен сейчас для вашего объекта, просто аннулировал текущий план запросов, а отчет, который работал за 1 секунду, теперь занимает 2 минуты, просто потому что вы добавили один столбец в список выбора? И выясняется, что требуемый вам индекс настолько велик, что администратор базы данных должен будет изменить физический макет ваших файлов?
Если вы позволите людям слишком далеко от физического хранилища данных с абстракцией, они создадут хаос с приложением, которое необходимо масштабировать.
Я не фанатик. Я могу быть уверен, что если я ошибаюсь, и, может быть, я, так как есть такой сильный толчок к Linq to Sql, ADO.NET EF, Hibernate, Java EE и т.д. Пожалуйста, продумайте свои ответы, если я чего-то не хватает действительно хочу знать, что это такое, и почему я должен изменить свое мышление.
[изменить]
Похоже, что этот вопрос внезапно активируется снова, поэтому теперь, когда у нас появилась новая функция комментариев, я прокомментировал сразу несколько ответов. Спасибо за ответы, я думаю, что это здоровое обсуждение.
Вероятно, я должен был быть более ясным, что я говорю о корпоративных приложениях. Я действительно не могу комментировать, скажем, игру, которая работает на рабочем столе или мобильном приложении.
Одна вещь, которую я должен поставить здесь наверху в ответ на несколько похожих ответов: ортогональность и разделение проблем часто упоминаются как причины для перехода на сущность /ORM. Хранимые процедуры, для меня, являются лучшим примером разделения проблем, о которых я могу думать. Если вы запретите любой другой доступ к базе данных, кроме как через хранимые процедуры, вы можете теоретически перепроектировать всю вашу модель данных и не нарушать какой-либо код, если вы поддерживаете входы и выходы хранимых процедур. Они являются прекрасным примером программирования по контракту (только до тех пор, пока вы избегаете "select *" и документируете результирующие наборы).
Спросите у кого-то, кто долгое время работал в этой отрасли и работал с долгоживущими приложениями: сколько приложений и слоев пользовательского интерфейса пришло и ушло, когда база данных уже жила? Насколько сложно настраивать и реорганизовывать базу данных, когда есть 4 или 5 разных уровней персистентности, генерирующих SQL для получения данных? Вы ничего не можете изменить! ORM или любой код, который генерирует SQL , блокирует вашу базу данных камнем.