2008-12-01 1 views
0

Этот вопрос о «Лучшее использование» сценариев в проектах с ORMs как NHibernate, дозвуковых, Linq2SQL и т.д ...использование класса в ORM на основе проектов

Все эти инструменты генерируют основные классы сущностей, некоторые с атрибутами, другие без. Используют ли эти классы как свои бизнес-классы? Или существует ли опциональное копирование данных из классов, сгенерированных ORM, в созданные вручную бизнес-классы?

Спасибо.

ответ

5

Я стараюсь работать обратным образом. Я создаю бизнес-объекты так, как они мне нужны, и создаю NHibernate-сопоставления из моих объектов в данные. Вы можете заставить NHibernate создать схему для вас на основе ваших сопоставлений, или вы можете создать свою собственную схему и создать сопоставления между ними. Linq2Sql и Entity Framework не поддерживают это. Я не могу говорить с Subsonic по этому вопросу.

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

+0

Это путь. Фактически, весь смысл OOP и ORM заключается в том, что вы можете работать с бизнес-объектами (модель домена)! Вы можете использовать такие инструменты, как NHibernate, чтобы прозрачно сохранять свои бизнес-объекты, но ваш код приложения не обязательно должен работать с постоянством. – yfeldblum 2008-12-04 22:12:59

1

Существует несколько решений для всех упомянутых инструментов, ответ зависит от объема вашего проекта.

Вот a similar question about LINQ to SQL, на что я ответил немного назад.

Надеюсь, что это поможет!

1

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

Я думаю, что создание отдельных бизнес-объектов и копирование данных между ними было бы большим количеством ненужных служебных данных. Но если вы обнаружите, что вам нужно это сделать, я бы рекомендовал просто обертывать объекты вместо копирования данных взад и вперед. Вы можете скрыть объект и использовать «Свойства», чтобы выставлять членов и изменять поведение.

1

SubSonic и Linq2Sql являются взаимно однозначными картами. Рассмотрим ситуацию, когда база данных нормализована. Например, информация сотрудника разбита на три разные таблицы, но в вашей модели домена вам нужен только один объект Employee, представляющий информацию. Здесь SubSonic и Linq2Sql терпят неудачу. NHibernate позволяет вам сопоставить объект домена с несколькими таблицами. Также вы хотели бы держаться подальше от автоматически сгенерированного кода. NHibernate позволяет вам определить свой собственный домен POCO (Plain old C# object) и имеет разные способы, позволяющие сопоставлять это с таблицами в базе данных

+0

Правильный Шираз. Чтобы изолировать себя от одного к одному, вам придется использовать SQL и абстрактно себя на этом уровне. – Ahmad 2008-12-12 17:18:11

Смежные вопросы