У вас класс зависит от контейнера. А то, что есть в контейнере или нет, он не знает, пока не спросит.
О том, есть 'nailer' или нет вы узнаете только во время выполнения специфической задачи. Самое простое - у вас может быть 10 методов, и вам придется их всех проверить, иначе во время жизни проекта может случится баг.
web-quest3: на чистом пхп я бы не советовал, особенно если будет такой человек, как заказчик. Хотя если это будет стоить для него две копейки, и он будет осведомлен, тогда можно.
Максим Федоров: а что вы хотите вынести из архитектуры ? Это все абстракции, если вы используете ООП, то и Фаулер и Зандстра будут вам хорощим пособием в вашем вопросе, остальное покроет только личный, практический опыт. А вы, видимо, уже ищите конкретных решений.
Мне нужно вывести количество устройств которые были выключены за день в течении недели
Нифига не понял. Выключены количество раз, за день, выключены в течении целого дня за неделю, или выключены по количеству времени равное дню, за неделю ?
Евгений: вы задали конкретный вопрос, я ответил. WebDev вам предложил вариант отключения проверки наличия схемы. Вариантов море, от указания текстом на форме, до модифицированного input и сообщения с ошибкой валидации.
Т.е. если у вас, например ControllerManufacturer1 и у него свой конструктор, свои доп. методы, то можете его создавать через свой же метод createFromController(IController controller (который пришел из базы))
А когда вы принимаете данные, то можете просто вызывать этот класс, но вам, возможно (не знаю способности ОРМ в с#) создавать из него стандартный IController , чтобы поместить в базу.
Но для такого финта ушами, нужен хендлер\менеджер\etc. который будет это все дело разруливать. Т.е. внутри него вы должны будете зарегистрировать типы контроллеров. Т.е. когда из базу получаете контроллер, далее у вас есть список Manufacture\Type\Че-то там любой ключ => ClassName (класс конкретного контроллера), при получении вызываете у него метод createFromController и получаете конкретный экземпляр с методами и т.д.
vilix: а так всегда бывает, когда пытаешься решить задачу в уме, в итоге достаточно пообщаться с кем-нибудь, просто пытаясь обьяснить задачу, как все становится на свои места.
Думаю не стоит мой комментарий делать ответом, так как он не решает вашей задачи, тут лучши вы сделайте свой комментарий как ответ, грамотно обьяснив, по какой причине вам не подходит вариант, который вы изначально выбрали. Так будет полезней.
vilix: т.е. по сути вырисовывается такая структура:
DeviceModel
- id
- original_name
- manufacturer (я бы вынес в отдельную таблицу) : IManufacturer::getName()
- work_modes (не понял, что это)
Controller extends DeviceModel
- id
- name
- address
IManufacturer
- id
- name
Далее мне нужно, при получении из базы, получать контроллер нужного типа.
Самое главное, почему вам нужно получать определенный класс контроллера для разных Manufacturer , что вы хотите в дальнейшем с этим делать ? По идее ,если пользуетесь ORM, там можно настроить маппинг в зависимости от типа (содержимого поля, которое вы укажите как тип).