Я пишу оценщик покерных рук как мой первый программный проект. Я прошел через три класса, каждый из которых хорошо выполняет свою узко определенную задачу:
HandRange = строковый объект (например, "AA"). getHands () возвращает список кортежей для каждой конкретной руки в строке:
[(Ad,Ac),(Ad,Ah),(Ad,As),(Ac,Ah),(Ac,As),(Ah,As)]
Перевод = словарь, который отображает список возврата из getHands в значения, которые полезны для данного оценщика (да, это, вероятно, может быть реорганизовано в другой класс).
{'As':52, 'Ad':51, ...}
Evaluator = берет список из HandRange (в переводе Translator), перечисляет все возможные комбинации рук и предоставляет% выигрыша для каждого.
Мой вопрос: как должен выглядеть мой «доменный» класс для использования всех этих классов, учитывая, что я могу захотеть подключиться к нему через интерфейс оболочки или графический интерфейс? Прямо сейчас это выглядит как процесс сборочной линии:
user_input = HandRange()
x = Translation.translateList(user_input)
y = Evaluator.getEquities(x)
Это пахнет смешно, потому что мне кажется, что это процедурно, когда я должен использовать ОО.
В более общем смысле: если я потратил так много времени на то, чтобы мои классы были четко определены, узко сфокусированы, ортогональны, что угодно ... как я на самом деле управляю рабочим процессом в моей программе, когда мне нужно использовать все из них подряд?
Спасибо
Mike