Я не совсем уверен, что полностью понимаю фабричный шаблон.
Допустим, у меня есть класс Customer
, который имеет в основном следующие методы:
CreateCustomer
- static, создает клиента с нуля и добавляет его в базу данных, LoadCustomer
- static, загружает экземпляр Customer
из базы данных, KillCustomer
- не статический, удаляет клиента из базы данных.
Если я правильно понимаю,
LoadCustomer
- хороший кандидат на включение взаводской класс. - А как же
CreateCustomer
?Я полагаю, что может быть переведено в фабричный класс .Это правильно?Если нет, статический метод CreateCustomer
изменит состояние базы данных, , затем вызовите CustomerFactory.LoadCustomer
.ИМХО, это плохой дизайн: данному объекту не нужно ничего знать о ее собственной фабрике. KillCustomer
мне кажется очень плохой кандидат для фабрики: это действует на уже созданный объект, а не на его создание.С другой стороны: - Если нестатический метод удаляет клиента из базы данных, объект (из которого был вызван
KillCustomer
) все еще существует.Это довольно странно видеть объект, совершающий самоубийство на уровне базы данных и все еще остающийся на бизнес-уровне .На этом уровне было бы разумнее звонить KillCustomer
с завода.Например, если объект кэшируется в приложении, фабрика может удалить его как из базы данных, так и из кэша. - Помещение в разные классы метода, который создает объект, и метода, который удаляет его, также кажется странным. Почему фабрика может просто что-то построить и никогда не разрушить то, что было построено?
И последнее, но не менее важное: скажем, клиенты кэшируются в приложении. Кто отвечает за управление кешем? ИМО, фабрика должна это делать: она создает объекты, так что это хороший выбор, чтобы выбрать, должен ли быть загружен новый объект со свойствами, заполненными из базы данных, или еслиобъект уже существует в кеше.
Итак, что правильно и что не так в том, что я думаю о фабричном шаблоне?