Должны ли коллекции также отвечать за создание объектов? (Шаблон единой ответственности) - PullRequest
0 голосов
/ 11 марта 2009

Должна ли коллекция объектов также отвечать за создание новых объектов?

Позвольте мне объяснить. У меня есть два класса, PhoneCall и PhoneCallList. PhoneCallList - это коллекция объектов PhoneCall. Наш архитектор и я не в курсе, как создать новые объекты PhoneCall. В настоящее время объект PhoneCall имеет метод Create, который добавляет запись в базу данных, а объект PhoneCallList имеет метод Add, который добавляет PhoneCall в список.

Архитектор хочет, чтобы метод Add в PhoneCallList также создал новую запись в базе данных и добавил ее в коллекцию. Делает ли это так, нарушает ли принцип единой ответственности? Мне кажется, что это не лучший способ сделать это.

Какой лучший способ сделать это?

* Ни один объект не имеет знаний о БД. Служба вызовов, которая заботится обо всем доступе к данным. Вопрос в том, должен ли объект PhoneCall или PhoneCallList вызывать службу, которая осуществляет доступ к данным?

1 Ответ

1 голос
/ 11 марта 2009

Я не уверен относительно контекста, но это похоже на две проблемы. Кто должен создать объект PhoneCall, а кто должен добавить PhoneCall в базу данных. Я хотел бы предложить, чтобы объекты PhoneCall создавались любым вышестоящим модулем, манипулирующим PhoneCallList, и передавали это в функцию «Add» PhoneCallList. Я также склонялся бы ни к одному классу, делающему запись DB. Это звучит как хорошая причина для 3-го класса.

...