В конечном счете, это призыв к моделированию предметной области, и здесь нет однозначного правильного ответа.Важно то, как каждый выбор влияет на удобочитаемость и удобство сопровождения кода.
Я предпочитаю использовать статические члены для функциональности, которая очень «согласована» с типом, больше, чем какой-либо конкретный фрагмент кода бизнес-логики.Вспомните Parse
функции или умные конструкторы / фабричные методы.Общий подход заключается в том, что если бы я реорганизовал код, переместив тип в другое место, это были бы функции, которые я определенно хотел бы переместить вместе с ним.Наличие их в качестве статических членов также помогает обнаружению через intellisense, так как вам нужно только знать имя типа, чтобы найти их.
С другой стороны, я бы использовал модуль для размещения бизнес-логики, которая представляет некоторыеабстрактный процесс, и если рассматриваемая функция каким-то образом специфична для этой бизнес-логики и вряд ли будет полезна вне ее, то я бы пошел с функцией в модуле, даже если она все еще в некоторой степени зависит от типа.Например, синтаксический анализатор с очень конкретной целью, полезный только как часть этого одного рабочего процесса по унаследованным причинам, был бы функцией с ограниченным доступом, а не статическим членом, потому что другие клиенты, использующие этот тип, вообще не должны даже знать об этой функции,
В вашем случае я бы выбрал статический член Next
, если имеет смысл использовать его в нескольких различных модулях в вашем контексте - если возможность циклически проходить через Seasons
является фундаментальнойкачество, которое определяет, что такое Season
.
В противном случае, если у вас есть только один модуль, скажем, WeatherPatterns
, который регулирует количество осадков в зависимости от смены сезона, и это единственная часть вашего кода, где вы заботитесь о циклическом переходе по Seasons
, тогда я 'Я поставил бы это как функцию в этом модуле.