Куда поставить * сериализацию * в SOLID программировании - PullRequest
1 голос
/ 14 июля 2020

У меня есть бизнес-объекты, которые я хотел бы (де) сериализовать из файла .yaml и в него.

Поскольку я хочу, чтобы .yaml был удобочитаемым, мне нужна определенная степень контроль над методами serialize и deserialize.

Где должны быть логики сериализации c go?

A) Если я учу каждый объект, как де / сериализовать себя , но это, вероятно, нарушает single-responsibility-principle.

B) Если я помещу его в общий модуль serialization, это может нарушить open-closed-principle, поскольку в будущем будет добавлено больше бизнес-объектов. Кроме того, изменения объектов теперь необходимо выполнять в двух местах.

Каков подход SOLID для решения этой головоломки для приложений малого масштаба?

1 Ответ

0 голосов
/ 17 июля 2020

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

Однако есть пара опасностей. Во-первых, вам действительно нужно настаивать на том, чтобы бизнес-объект был сериализуемым, или вы можете оставить это на усмотрение пользователя, чтобы решить, сериализуемы они или нет? Если вы навязываете требование сериализуемости, то есть большая вероятность, что вы таким образом нарушаете SRP, потому что по мере развития системы сериализации вы будете навязывать свои собственные требования к объектам.

Во-вторых, вы вероятно, захотите долго и серьезно подумать об интерфейсе, который эти объекты используют для сериализации. Это обязательно должен быть ямл? Зачем? Это обязательно должно быть в файл? Старайтесь не навязывать требования, которые могут быть изменены, потому что они зависят от конкретных решений по реализации, которые вы принимаете в остальной части системы. Это также является нарушением SRP, потому что эти объекты должны развиваться в соответствии с требованиями из двух разных источников. Лучше, если объекты сами инициируют свою сериализацию и могут выбирать реализацию в максимально возможной степени.

...