В любом случае, чья это ответственность? - PullRequest
2 голосов
/ 17 сентября 2008

В приложении, которое я пишу, у меня есть класс Policy. Есть 4 различных типа политики. Каждая политика сопоставляется с другими политиками, так что PolicyA> PolicyB> PolicyC> PolicyD.

Кто несет ответственность за реализацию логики, чтобы определить, является ли одна Политика выше другой? Сначала я хотел перегрузить операторы> и <и реализовать логику в самом типе политики. </p>

Это нарушает SRP?

Ответы [ 5 ]

6 голосов
/ 17 сентября 2008

Я думаю, что класс PolicyComparer должен выполнять оценку.

0 голосов
/ 17 сентября 2008

Вы хотите класс PolicyComparator. Если вы хотите переопределить <и>, это нормально, но сделайте это переопределением в базовом классе Policy, и эти реализации используют для этого PolicyComparator.

0 голосов
/ 17 сентября 2008

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

0 голосов
/ 17 сентября 2008

Вы также можете хранить атрибут PolicyWeight в своем классе, который является простым встроенным типом (int, unsigned int, ...), который затем можно легко сравнить.

0 голосов
/ 17 сентября 2008

Я думаю, что вы находитесь на правильном пути с перегрузкой, однако расширение этого, очевидно, намного длиннее

если (A> B || B> C || C> D) ...

...