Используя php 5.2, я пытаюсь использовать фабрику, чтобы вернуть сервис контроллеру.Моя просьба будет иметь формат www.mydomain.com/service/method/param1/param2/etc.Мой контроллер затем вызвал бы сервисную фабрику, используя токен, отправленный в URI.Из того, что я видел, есть два основных маршрута, по которым я мог бы пойти с моей фабрикой.
Один метод:
class ServiceFactory {
public static function getInstance($token) {
switch($token) {
case 'location':
return new StaticPageTemplateService('location');
break;
case 'product':
return new DynamicPageTemplateService('product');
break;
case 'user'
return new UserService();
break;
default:
return new StaticPageTemplateService($token);
}
}
}
или несколько методов:
class ServiceFactory {
public static function getLocationService() {
return new StaticPageTemplateService('location');
}
public static function getProductService() {
return new DynamicPageTemplateService('product');
}
public static function getUserService() {
return new UserService();
}
public static function getDefaultService($token) {
return new StaticPageTemplateService($token);
}
}
Поэтому, учитывая это, у меня будет несколько общих сервисов, в которых я передам этот токен (например, StaticPageTemplateService и DynamicPageTemplateService), который, вероятно, реализует другой метод фабрики, такой же, как этот, для захвата шаблонов, объектов домена и т. Д.будут специфические сервисы (например, UserService), которые будут 1: 1 к этому токену и не будут использоваться повторно.Таким образом, это кажется правильным подходом (пожалуйста, дайте предложения, если это не так) для небольшого количества услуг.Но что касается того, когда со временем и мой сайт разрастется, у меня появятся сотни возможностей.Это больше не похоже на хороший подход.Я просто далек от того, чтобы начать, или есть другой шаблон дизайна, который будет лучше подходить?Спасибо.
ОБНОВЛЕНИЕ: @JSprang - токен на самом деле отправляется в URI, как mydomain.com/location, для которого нужен сервис, специфичный для loction, а mydomain.com/news для сервиса, специфичного для новостей.Теперь для многих из них услуга будет общей.Например, многие страницы будут вызывать StaticTemplatePageService, в которой токен передается службе.Этот сервис, в свою очередь, будет захватывать шаблон "location" или "links" и просто выплевывать его обратно.Некоторым понадобится DynamicTemplatePageService, в который будет передан токен, например, «новости», и этот сервис получит объект NewsDomainObject, определит, как его представить, и выплюнет его обратно.Другие, такие как «пользователь», будут специфичны для UserService, в котором у него будут такие методы, как Login, Logout и т. Д. Таким образом, в основном токен будет использоваться для определения, какая служба необходима, и если это общая служба, этот токен будетперешел на эту службу.Возможно, токен не является правильной терминологией, но я надеюсь, что вы поняли цель.
Я хотел использовать фабрику, чтобы я мог легко поменять, какой Сервис мне нужен, в случае, если мои потребности изменятся.Я просто волнуюсь, что после того, как сайт станет больше (как страниц, так и функциональности), фабрика станет довольно раздутой.Но я начинаю чувствовать, что просто не могу уйти от хранения отображений в массиве (как решение Стивена).Это просто не кажется мне ООП, и я надеялся найти что-то более элегантное.