Предположим, я хочу построить список строк (что не является реальным сценарием, но звучит проще объяснить).Должен ли завод иметь конструктор с параметрами?
Я бы интерфейс для моего списка строк завода, который будет выглядеть как этот
public interface IStringsListFactory{
List<string> Create();
}
Но позволяет сказать, один из моих бетонного завода потребуется, чтобы получить этот список строки из файла/базы данных и т.д. ..
public class StringsListFromFile : IStringsListFactory{
private StreamReader _streamReader;
public StringsListFromFile(StreamReader sr) //StreamReader is just an example.
{
_streamReader = sr;
}
public List<string> Create(){
///recover the strings using my stream reader...
}
}
Я знаю, что этот подход будет работать, но мне было интересно, если она нарушает фабричную модель для передачи параметров в конструктор завода, так что я не нарушу интерфейс. Есть ли какие-либо коллеги для этого? Есть ли другое решение, о котором я не думал? Я задаю слишком много вопросов!?! (Да, я знаю ответ на этот вопрос!)
Почему у моей фабрики есть состояние, так как мой член заключен в мой класс? И возвращает IEnumerable проблему производительности? – TopinFrassi
Используя мой проект в точке 2, вы можете создать экземпляр своего класса один раз, а затем использовать другой «StreamReader», не создавая другого объекта того же класса. Это еще одна история, если ваш инъецированный «StreamReader» является своего рода глобальной конфигурацией. Но для этого требуется еще один дизайн. – Fendy
Возвращение 'IEnumerable' - это просто привычка делать« Программу для интерфейса, а не программу для реализации ». Если интерфейс, возвращающий 'IEnumerable', может заставить его также возвращать массив или другую коллекцию, такую как' ObersvableCollection'. – Fendy