Обработка внешних зависимостей на фабрике - PullRequest
0 голосов
/ 10 ноября 2010

У меня есть фабричный класс, который, как мне кажется, нужно пересмотреть, возьмем следующий пример:

public class FileFactory
{
    public static FileType Create(string fileName)
    {
        if(IsImageFile(fileName))       
        {
            return new ImageFileType();
        } 
        else if(IsDocumentFile(fileName))
        {
            return new DocumentFileType();
        }
        ...
    }

    private static bool IsImageFile(string fileName)
    {
        string imageFileTypes[] = string[] {".jpg", ".gif", ".png"}; //How to avoid this line of code?
        return imageFileTypes.Contains(fileName);
    }
}

Я свободно следую принципам доменного дизайна, поэтому этот класс FileFactory является объектом домена. Должен ли фабричный класс обращаться к хранилищу / БД для получения типов файлов?

Как мне справиться с зависимостью в этом сценарии?

1 Ответ

0 голосов
/ 21 июня 2011

Новый, неизвестный тип файла изображения действительно маловероятен. Хорошо это жестко закодировать.

Если вы действительно хотите сохранить этот список файлов в качестве внешней зависимости, передайте список типов файлов в конструктор FileFactory и сделайте Create() методом экземпляра вместо статического. Это сделает вас тестируемым и твердым.

...