Single Responsibility Principle in GO
☝ Single Responsibility
"In any well-designed system, objects should only have a single responsibility."by Robert Martine.
すべての設計が良好なシステムでは、オブジェクトには1つの責任しかありません.
すなわち、実装オブジェクトのコードは、効率的な方法で1つのことを処理することに集中しなければならない.この言葉を正しく理解するためには、これらの原則に違反するコードを表示したほうがいいです.
まず、ドローンベースの配布サービスをサポートするソフトウェアを開発しているとします.
次のコードは、Droneが納品中に負うべき責任を定義するコードと見なすことができます.
その原因は二つの複合の責任を同時に負っていると言える.ナビ(飛行) 検出 実際には、飛行とプローブの2つの責任を「ドライブ」と呼ばれるオブジェクトタイプに同時に宣言して開発しても、最初のプログラム操作は問題ない可能性があります.しかし、問題はその後に起きた.飛行と探査の2つの責任が同時に存在するため,結合が生じ,さらなる開発と拡張の難しさが増す.
たとえば、プローブ用の人工知能モデルを他のものとして使用したり、他のタイプのドライブで既存の同じプローブコードを使用したりする場合は、存在する結合状態を維持しなければなりません.そのため、飛行に関連するコードを常に維持する必要があります.
"In any well-designed system, objects should only have a single responsibility."by Robert Martine.
すべての設計が良好なシステムでは、オブジェクトには1つの責任しかありません.
すなわち、実装オブジェクトのコードは、効率的な方法で1つのことを処理することに集中しなければならない.この言葉を正しく理解するためには、これらの原則に違反するコードを表示したほうがいいです.
まず、ドローンベースの配布サービスをサポートするソフトウェアを開発しているとします.
次のコードは、Droneが納品中に負うべき責任を定義するコードと見なすことができます.
// NavigateTo applies any required changes to the drone's speed
// vector so that its eventual position matches dst.
func (d *Drone) NavigateTo(dst Vec3) error { //... }
// Position returns the current drone position vector.
func (d *Drone) Position() Vec3 { //... }
// Position returns the current drone speed vector.
func (d *Drone) Speed() Vec3 { //... }
// DetectTargets captures an image of the drone's field of view (FoV) using
// the on-board camera and feeds it to a pre-trained SSD MobileNet V1 neural
// network to detect and classify interesting nearby targets. For more info
// on this model see:
// https://github.com/tensorflow/models/tree/master/research/object_detection
func (d *Drone) DetectTargets() ([]*Target, error) { //... }
上記のコードは単一責任の原則に違反しています.その原因は二つの複合の責任を同時に負っていると言える.
たとえば、プローブ用の人工知能モデルを他のものとして使用したり、他のタイプのドライブで既存の同じプローブコードを使用したりする場合は、存在する結合状態を維持しなければなりません.そのため、飛行に関連するコードを常に維持する必要があります.
Reference
この問題について(Single Responsibility Principle in GO), 我々は、より多くの情報をここで見つけました https://velog.io/@youngstone89/Single-Responsibility-Principle-in-GOテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol