OOD - Как разработать и структурировать проекты, чтобы избежать повторного развертывания основного Приложения (шаблон фабрики?)

Я хотел бы проверить, насколько мое понимание в использовании и реализации фабричного шаблона. Скажем, я разрабатываю приложение для игры в несколько игр (шахматы, покер). Игры загружаются из одного из следующих источников: CSV, XML, но я хочу иметь возможность добавлять новые источники (например, БД) без перекомпиляции / повторного развертывания приложения. Я просто хочу развернуть заводскую логику и новый загрузчик

Это предполагает фабричный шаблон для загрузчика игры, что-то вроде следующего, которое, однако, вызывает циклические зависимости, потому что конкретные загрузчики возвращают List.

Application.prj has reference to AbstractFactory.prj
-----------------------

    main ()
    List<Game> games = LoadGameFactory.Create(src).Load(src)
    foreach(game in games) game.play();

abstract class Game { .. abstract void Play(); ..}
class Chess : Game  { .. void   Play() ..}
class Poker : Game  { .. void   Play() ..}

Factory.prj has reference to Application.prj
------------------------
class LoadGameFactory { 
    GameLoader Create(string src)
    {
        if(src == csv) return new LoadCSVGames().Load(src)
        else           return new LoadXMLGames().Load(src)      
    }
}
class GameLoader{ List<Game> Load(src) }

class CSVLoader : GameLoader
{
    List<Game> Load(src){ ... logic to create Chess() and Poker() from CSV file}
}

class XMLLoader : GameLoader
{
    List<Game> Load(src)    { ... logic to create Chess() and Poker() from XML file}
}

Решение, которое я нашел, состоит в том, чтобы создать новый проект, Application.Model, в который я перенесу Game, Chess и Poker, ecc. Таким образом, Application.prj и Factory.prj должны будут ссылаться только на Application.Model. А добавление источника БД требует только factory.prj перекомпиляции и развертывания.

Это путь? или есть способ реализовать фабричный шаблон, чтобы получить тот же результат. Я не хочу отражения.

1 ответ

Похоже, вы хотите дизайн на основе плагинов. Я предполагаю, что это C#. То, что вы хотите сделать, это разработать строгий набор интерфейсов, которые определяют игры, загрузчик игр и т. Д. Затем вы используете Assembly.LoadFrom() загрузить все библиотеки DLL и использовать отражение, чтобы получить экспортированные классы, которые наследуются от этих интерфейсов, от этих сборок, и создать новые объекты.

Другие вопросы по тегам