Я искал пример хорошего шаблона Builder (на С#), но не могу найти его либо потому, что я не понимаю шаблон Builder, либо я пытаясь сделать то, что никогда не предназначалось. Например, если у меня есть абстрактные автомобильные и абстрактные методы создания автозапчастей, я должен быть в состоянии отправить все 30 из моих выборов Директору, построить ли он куски, которые мне нужны, а затем построить мой автомобиль. Независимо от того, какой автомобиль, грузовик, полу и т.д. Производится, я должен быть способен "прогнать" его точно таким же образом.
Первая проблема - это, скорее всего, примеры значений жесткого кода для конкретных частей, которые, я думаю, должны исходить из базы данных. Я думал, что идея состоит в том, чтобы отправить мой выбор Директору (из источника данных) и создать застройщик для персонализированного продукта на основе моих данных.
Вторая проблема заключается в том, что я хочу, чтобы методы-конструкторы фактически создавали детали, а затем назначали их продукту, а не передавали строки, а действительно сильно типизировали части продукта.
Например, я хочу создать форму "на лету", имея для меня поля формы изготовления Builder, включая метку, раздел ввода, проверку и т.д. Таким образом, я могу прочитать объект из своего ORM, проверить метаданные объекта, передайте это моему Builder и добавьте вновь созданный результат пользовательского контроля в мою веб-форму.
Однако каждый пример Builder, который я нахожу, имеет только жестко закодированные данные вместо того, чтобы передавать варианты из основного кода в Builder и выталкивать настроенный продукт. Кажется, что это большой статический аргумент. Например, если у меня есть три параметра с 10 вариантами в каждом, я не хочу создавать 30 конкретных методов Builder, я хочу создать только достаточно для создания свойств, требуемых моим продуктом, которые могут быть только тремя.
У меня возникает соблазн, что директор существует только в основном коде. Должен быть способ автоматически определить, какой конкретный метод построения вызывать похожим на полиморфизм и перегрузку метода (хотя это очень плохой пример), а не использовать оператор case в шаблоне. (Каждый раз, когда мне нужно добавить новый тип продукта, мне нужно будет изменить существующего директора, что плохо).