гибридный объект значения / типы объектов? - PullRequest
3 голосов
/ 06 июля 2011

Да, я согласен, что название предполагает, что мое нынешнее мышление неверно.НО в надежде снова прийти к здравомыслию, вот как я добрался до этого плачевного состояния.

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

Конечно, сотрудники имеют работу, потому что приложение обслуживает тысячи клиентов.В этом контексте более полезно рассматривать адрес как объект ValueObject.

Теперь я хотел бы иметь шаблон Party, чтобы поддерживать общие черты, которыми обладают компании и люди, например ... адреса.

Последний фактоид - у нас есть класс ValueObject, который делает то, что вы можете ожидать от объектов-значений (т. Е. Определяете равенство на основе открытых свойств), и класс Entity (равенство на основе некоторого идентификатора, если объект является постоянным).

Итак, что делать?Я играл со следующими классными идеями, прежде чем подумал, что смогу спросить это и посмотреть, какие ответы вернулись ...

class Address : ValueObject, IHaveAddress{
    Line 1 {get;}
    ... etc
    Address {get{return this;}} // this has an awkward smell
}

class EntityAddress : Entity<int>, IHaveAddress{
    Address {get;}
}

interface IHaveAddress {
    Address {get;}
}

class Party : Entity<int> {
    IList<IHaveAddress> _address;
}

Есть ли какая-либо заслуга такой идеи??

Приветствия,
Berryl

ОТВЕТ

Да, мое мышление было дефектным: -)
Объект, который я искал, является сущностью, вконтекст модели ниже.

Благодаря IAbstract и эта замечательная ссылка

enter image description here

1 Ответ

2 голосов
/ 06 июля 2011

Помогает ли это: блоги MSDN ... Реализовать базовый класс объекта-значения ?Я думаю, что нашел что-то новое, с чем можно поиграть ...

Обновление Я не уверен, насколько это ответ
... Я думаю, что гораздо менее запутанным остается использование стандартной терминологии «Композит», а не «партия».Фактически у вас есть компания (корень), набор адресов (или филиалов), в которых работает много людей (или уходит).

Я пока не уверен, насколько значение действительно имеет ValueObject.На первый взгляд, супертип может оказаться полезным для сравнения объектов Address.Это, кажется, имеет несколько отсталый вид, хотя.Тем не менее, в вашем примере, безусловно, имеет больше смысла хранить 1 объект Address и добавлять Person в качестве составных объектов в Address филиала.

Как я уже говорил ранее, у меня есть личный проект, в котором я буду использовать ValueObject для работы с некоторыми объектами Composite, чтобы обнаружить его полезность.Ваша ссылка на Entity связана с какой-либо реализацией Entity Framework?Или Entity<int> просто предназначен для ссылки на идентификационный номер записи?

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