Contents
Keep closely related data and behavior together in a class for high cohesion and clear separation of concerns. Conversely, do not split strongly related elements across separate functions. (密接に関連するデータと振る舞いをクラスにまとめて高い凝集度と明確な関心の分離を実現する。逆に、強く関連する要素を別々の関数に分割しない)
解説
高い凝集度は、関連するデータと操作を1箇所にまとめることで実現されます。データとそれを操作する振る舞いが離れていると、変更時に複数箇所を修正する必要が生じ、整合性を保つことが困難になります。クラス(構造体)内で関連する要素を集約することで、コードの理解が容易になり、変更の影響範囲が明確になります。
具体例
// 悪い例
type User struct {
Name string
Email string
}
func validateUserEmail(email string) bool {
return strings.Contains(email, "@")
}
func formatUserName(name string) string {
return strings.Title(name)
}
// 良い例
type User struct {
Name string
Email string
}
func (u *User) ValidateEmail() bool {
return strings.Contains(u.Email, "@")
}
func (u *User) FormatName() string {
return strings.Title(u.Name)
}
