Я прочитал несколько книг и послушаю лекцию о разработке программного обеспечения. Но я не знаю, как решить проблемы, вызванные следующими проектами проектирования OO.Недостаток принципа единой ответственности
Вот несколько ситуаций. Я начинаю проектировать простой одиночный класс (ClassA). После этого ClassA растет с аналогичными обязанностями. В соответствии с принципом единоличной ответственности я извлекаю некоторую логику от ClassA до ClassB. ClassA снова становится достаточно простым. Однако ответственность ClassA может быть аналогичной с классом ClassB, , так что ClassA и ClassB имеют ссылки друг на друга в качестве полей или свойств членов для сотрудничества. Другими словами, разделение классов делает еще одну сложность. Это взаимодействие между отдельными классами. Впоследствии каждый из классов ClassA и ClassB может также развиваться с более сложными функциями ответа, , а некоторые классы (ClassC или ClassD) могут быть отделены от ClassA или ClassB. Теперь взаимодействие между классами становится намного сложнее. Каждый из классов может иметь ссылки на другие классы как поля memeber или параметры метода.
Поскольку один класс упрощается, число классов увеличивается, увеличивается сложность отношений и взаимодействие между классами.
В некоторых удачных случаях это можно решить с помощью шаблонов проектирования. Во многих случаях, однако, разделение классов делает отношения классов более сложными. и создавать тенденцию генерировать классы, содержащие слишком много ссылок на другие классы в качестве членов. Класс, имеющий слишком много ссылок на другие классы в качестве членов, трудно проверить.
Я прочитал несколько книг по дизайну OO. Большинство из них говорят, что простой класс хорош. Ни один из них, однако, не сосредоточен на сложности взаимодействия классов, вызванных SRP.
Пропустить что-нибудь? Как решить эту проблему?
Как правило, предпочтительнее иметь больше классов, каждый из которых имеет отдельные обязанности, чем для того, чтобы иметь меньшее количество классов, каждый из которых имеет сложную ответственность. Ситуация, которую вы описываете, является общим результатом рефакторинга, чтобы поддерживать SRP. –