Вы думаете о базе данных или объектах в первую очередь при создании приложений? - PullRequest
4 голосов
/ 29 апреля 2009

Когда вы думаете о создании приложения, скажем для Интернета, и оно использует реляционную базу данных, вы сначала думаете о базе данных, а затем ставите свое приложение в качестве внешнего интерфейса или думаете о своей программе и объектах и база данных может хранить их. Я пытаюсь изменить способ, которым я думаю, но это не щелкнуло (я не уверен, что я даже прав в своей оценке.)

Я задавал другие вопросы Hibernate и NHibernate, но я пытаюсь закрепить его. Я склонен сначала думать о приложениях с базами данных со стороны базы данных, а затем думать о приложении. После прочтения многого о Hibernate кажется, что те, кто использует Hibernate, думают иначе. Кажется, они думают об объектах и ​​классах. Они делают полную противоположность мне.

И в контексте Hibernate. Если я сначала склонен думать о стороне базы данных, это «плохой» или «неправильный» образ мыслей при запуске? Мне удалось найти лишь несколько последовательных причин для использования Hibernate или другого ORM - производительность, независимость от базы данных, и это зависит от этого. Я хочу использовать Hibernate, но я хочу подойти к нему правильно. Кажется, это совсем другой способ мышления, а не просто производительность и выбор баз данных.

Связанный:

Что важнее? Дизайн БД или кодирование? .

Ответы [ 12 ]

7 голосов
/ 29 апреля 2009

Очевидно, вы получите много разных ответов на этот вопрос, но я склонен сначала думать о базе данных, а затем строить объекты на основе этого. Я думаю, что моему мозгу проще работать таким образом, поскольку я могу визуализировать схему базы данных (а также очень легко показать отношения в схеме базы данных). @Tdpi прямо здесь: вы должны проектировать на основе проблемной области - для меня это означает мышление в базе данных, но для разных людей оно разное.

Отношения между объектами не всегда так очевидны, и поэтому сложнее нарисовать диаграмму, которая показывает их отношения. Наличие объектов, наследуемых друг от друга (но, возможно, с использованием одних и тех же таблиц на стороне базы данных), может еще больше запутать. Тем не менее, в некоторых сложных приложениях я выполнял оба одновременно - например, создавал таблицу и в то же время создавал структуру объектов, в которой несколько объектов наследуют одну и ту же базу, и все используют одну и ту же таблицу.

Другим аргументом для DB-first является то, что большинство слоев ORM, как правило, генерируют объекты на основе схемы базы данных, поэтому, если вы проектируете объекты, затем попытаетесь выполнить обратный инжиниринг базы данных, а затем позвольте ORM генерировать объекты, вы добры делать вещи задом наперед и почти наверняка не получится в точности с тем, что вы спроектировали вначале на бумаге.

Если вы используете ORM, который генерирует базу данных для вас на основе объектов, то, вероятно, имеет смысл сделать это наоборот, и сначала спроектировать ваши объекты. Пока вы правильно моделируете проблемную область, менее важно, если вы сначала строите базу данных или объекты.


Все это говорит о том, что когда я проектирую интерфейсную часть приложения, я создаю его карандашом и бумагой и даже не думаю о том, как данные хранятся в серверной части. (объекты, база данных или что-то еще). Я просто проектирую интерфейс так, как я хочу, чтобы он выглядел и работал.

Затем следующей задачей является подключение этого пользовательского интерфейса к базовой схеме, которая иногда очень проста, а иногда и не так проста - но я обнаружил, что именно так создаются лучшие пользовательские интерфейсы. Часто я не раскрываю всю функциональность или разрешаю настраивать только простые настройки (например, разрешать применение только разрешений, даже если серверная часть также позволяет запретить разрешения на наследование). Это означает, что ваш пользовательский интерфейс не слишком сложен, или, по крайней мере, проще создать первую версию, но вы также не застряли с созданием ограниченного бэкенда или с необходимостью радикально изменить его в будущем.

Когда вы создаете пользовательский интерфейс на основе того, как хранятся данные или созданные вами объекты, он, как правило, выглядит именно так - пользовательский интерфейс, разработанный программистом.

4 голосов
/ 29 апреля 2009

Ни.

Вы думаете о сущностях в проблемной области, которые вам нужно смоделировать. Моделирование их как объектов OO или объектов базы данных - это деталь реализации. (Хотя мне легче думать о существительных / сущностях как о базе данных, а о глаголах / операциях как оО-коде.)

В контексте Hibernate или других ORM мой опыт заключается в том, что база данных лучше объясняет отношения между сущностями, и что при разработке схемы возникают вопросы о том, какие эти отношения существуют в реальном мире / должны быть в модели. Дело не в том, что это лучшая модель, как таковая , а в том, что это лучший процесс для вытеснения этих вопросов.

2 голосов
/ 29 апреля 2009

Сначала я всегда думаю о пользовательском интерфейсе, в конце концов, это то, что клиент увидит, и им не будет дела до того, нормализуется ли ваша база данных или ваши объекты хорошо спроектированы ... (по крайней мере, нет конечные пользователи). Убедившись, что интерфейс - это то, что мне нужно, я думаю о второй базе данных и о последних объектах - я думаю, что вы могли бы сделать обоснованный вариант в любом случае на последних двух, но у меня есть лучший фон БД, и мне нравится работать большие базы данных, поэтому я считаю хороший ключ дизайна БД. Как только пользовательский интерфейс определен, а база данных определена, объекты - это клей, который заставляет все это работать ... по крайней мере, в моем понимании.

2 голосов
/ 29 апреля 2009

Мне трудно разделить их. Моя объектная модель и моя модель данных (в общих чертах) имеют тенденцию быть довольно схожими. Конечно, бывают случаи, когда этого не происходит, поэтому я обобщаю.

На мой взгляд, применяются следующие правила:

  • Модель данных должна быть спроектирована с учетом оптимальной производительности и оптимального дизайна / разработки отчета.

  • Объектная модель должна быть разработана для передачи данных в приложение с оптимальной производительностью, масштабируемостью и интеграцией с графическим интерфейсом. Вам не нужно прыгать через кучу обручей, чтобы получить данные из графического интерфейса в базу данных или обратно. Часто ядро ​​объектной модели будет очень похоже на ядро ​​модели данных.

  • Графический интерфейс должен быть спроектирован так, чтобы сделать жизнь пользователя максимально простой и максимально гибкой. Пользователь не должен знать / понимать / заботиться о / быть подверженным базовой объектной модели.

Очевидно, что будут особые случаи, когда эти рекомендации не будут соблюдаться, но по большей части ключом является простота.

1 голос
/ 29 апреля 2009

Ни. Как правило, я склонен думать об этом в терминах «глаголов»; то есть то, что пользователи будут делать с системой. То есть я работаю над набором сценариев использования, в которых я смотрю, что пользователи будут делать с системой. После того, как они завершены, они могут одновременно руководить созданием бизнес-объектов и базы данных.

Проблема с запуском базы данных в том, что если вы это сделаете, вы можете получить очень хорошую базу данных, которая не поддерживает то, что вы хотите делать; если вы сначала думаете об объектах, вы думаете о структурах. Пользователь не заботится о вашей настойчивости или вашем представлении данных; они просто заботятся о том, чтобы все было сделано.

1 голос
/ 29 апреля 2009

Это, вероятно, не самый распространенный взгляд, но, честно говоря, я просто не думаю, что важно, каким путем вы идете. Если вы думаете лучше на стороне базы данных, сделайте это там. Если вы думаете лучше в ОО-коде, делайте это там. Там нет правильного способа сделать это. Они оба - просто способы моделирования реальных сущностей, которые представляет ваше приложение, и это то, о чем вам действительно нужно подумать.

0 голосов
/ 29 апреля 2009

Я участвовал в 3 проектах, где люди пытались внедрить объектно-ориентированный дизайн и образ мышления в реляционную базу данных, которая «думает» по-другому. Все они задействованы в спящем режиме. Все они были неудачами по сходным причинам. Совпадения? Может быть. Странные совпадения, хотя ... Мое скромное мнение - используйте две головы отдельно. Один для моделирования проблемы, а другой для хранения данных. Для моделирования лучше всего использовать объектно-ориентированный способ. Для хранения данных - это боль. Я лично предпочитаю решения, когда есть посредник - кто-то между реляционной базой данных и остальными из нас:)

0 голосов
/ 29 апреля 2009

Оба.

Обратите внимание, что требования и идея должны быть выполнены без учета того или иного - не стоит беспокоиться о технических реализациях в течение этого времени.

Но когда дело доходит до создания приложения - думайте с точки зрения обоих. По моему мнению, каждый программист должен иметь четкое представление о базе данных и наоборот. Мышление с точки зрения как объектов, так и таблиц помогает вам распределить вещи тому, кто лучше в этом. (простой пример: сложный поиск может быть выполнен в SQL-файле с несколькими объединениями или текстовым индексом, а не полностью в java или c #).

0 голосов
/ 29 апреля 2009

Для меня это микс. С тех пор, как 1,5 года назад я начал работать с Entity Framework, я склонен мыслить с точки зрения навигационных свойств. Я делаю наброски на бумаге так, как хочу, затем думаю о том, как Entity Framework будет перемещаться между сущностями и т. Д. Из этого я проектирую базу данных, выгружаю базу данных в модель инфраструктуры сущностей и создаю мои модульные тесты. Затем я внесу необходимые изменения, если он не перемещается бегло. У меня действительно не было проблем со скоростью.

0 голосов
/ 29 апреля 2009

Для меня это равносильно тому, чтобы спросить, думаю ли я сначала о пользователях или программистах. Если я думаю о самом быстром способе покончить с этим, я начну с базы данных. Тем не менее, я очень стараюсь начать с объектов (которые выходят из вариантов использования); затем напишите схему базы данных, которая обслуживает объекты. (Довольно часто они разные). Если база данных уже существует, это еще более важно, поэтому вы заставляете себя создать хороший уровень абстракции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...