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