Проектирование моей доменной модели вокруг одной сторонней библиотеки - PullRequest
1 голос
/ 22 сентября 2010

Я работаю над инструментом для анализа покера со следующим вариантом использования:

  1. Пользователь создает класс стратегии одним методом: ввод GameState, вывод PokerAction
  2. Пользователь запускает сценарий анализа, который запускает PokerGame между различными подклассами стратегий (т.е. различными стратегиями)
  3. PokerGame генерирует случайную колоду
  4. PokerGame отправляет GameState в стратегию
  5. Стратегия отправляет PokerAction в PokerGame
  6. Обновления PokerGame GameState
  7. Когда игра закончится (управляется PokerGame), отправьте GameResult в скрипт Analysis
  8. Вывод пользовательских отзывов скрипта Analysis

Естьсторонняя библиотека, которая выполняет все функции PokerGame.Это совсем не соответствует моему собственному моделированию домена в некоторых областях (например, значения карт и т. Д.), Но выполняет большую часть «трудных для кодирования» функций, которые мне нужны (то есть нетривиальные шаги 4 -7).

Общий вопрос проектирования Когда вы сталкиваетесь с подобной библиотекой (устраняет много жесткого кодирования, но может ограничить будущие варианты проектирования в связанных проектах), склонны ли вы формироватьОстальная часть вашего проекта в библиотеку?Реорганизуете ли вы библиотеку ключей, чтобы она соответствовала вашей доменной модели?Или это что-то еще?

Спасибо,

Майк

Ответы [ 2 ]

2 голосов
/ 22 сентября 2010

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

Просмотрите этот список дизайнашаблоны , особенно шаблон адаптера .

1 голос
/ 22 сентября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...