Как разработать решение, в котором есть аналогичная операция, например, CRUD, но которая не распространяется на все его подклассы - PullRequest
0 голосов
/ 11 октября 2011

Я пытаюсь разработать решение для обеспечения работы CRUD. Я предполагаю предоставить интерфейсы нескольким объектам. Где каждый класс отображается на одну сущность. Каждый класс обеспечивает операцию CRUD для каждого объекта. Однако есть некоторые объекты, которые обеспечивают только определенные операции. Например, только чтение и обновление, создание и чтение и т. Д. Как мне спроектировать так, чтобы я мог лучше масштабировать и создавать хороший интерфейс для других разработчиков?

мой текущий дизайн:

5 Interface
IEntity, IReadItem, IDelete, ICreate, IUpdate.
Example IEntity -> Customer class
IReadList -> Read List Operations on Customer
IDelete-> Delete operation on Customer
ICreate -> Create Item operation on Customer
IUpdate -> Update Operation on customer

EntityFactory -> Instantiate the IEntity, and 4 operation concrete class.
 -> getEntity(EntityType(enum)) : return Concrete IEntity Class
 -> getReadList(ReadListType(enum),entity) : return concrete GetItemOperation Class
 -> getDelete(DeleteType(enum),entity) : return concrete DeleteItemOperation Class
 -> getCreate(CreateType(enum),entity) : return concrete CreateItemOperation Class

Entity -> Responislbe of caching own information and connection
Read,Create,Delete,Update -> Responsible of it own details and operation

Each entity have all or subset of the type 4 operation, CRUD.

Есть ли лучший способ спроектировать это? или какой-либо комментарий к макету выше?

Ответы [ 2 ]

0 голосов
/ 11 октября 2011

Спросив о фактических целях проектирования выше ... без более конкретных целей, я бы сказал, сделайте это просто:

IEntity должен иметь методы Update и Delete, а фабрику - методы Read / List и Create. Объекты / фабрики, которые не поддерживают операцию, должны выдать исключение или вернуть значащее значение. Вот и все.

0 голосов
/ 11 октября 2011

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

Вы можете прочитать о некоторых параметрах персистентности здесь . Мартин Фаулер также показывает несколько на этой странице , перечисленных под Архитектурные шаблоны источника данных .

Конечно, у вас также есть возможность использовать существующий ORM, такой как Entity Framework или nHibernate.

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