2.0 - デザインパターンソフトウェアアーキテクチャ設計の7つの原則 - 合成多重化の原則

多重化原理(コンポジット/骨再利用原理、CARP)の合成ではなく、ソフトウェアの再利用の継承の目的のため、可能な物体組成物(HAS-A)/重合(contanis-A)を指します。あなたは、クラスとクラス間の結合を低減するために、システムをより柔軟にすることができ、他のクラスのクラスの影響で比較的小さな変化が生じました。私たちの継承は、実装の詳細の全てに相当し、ホワイトボックスの再利用は、サブクラスにさらされていると呼ばれています。また、ブラックボックスとして知られている合成/重合多重化されたオブジェクトは、クラスの実装の詳細を外部からアクセスすることができません。特定のビジネス・シナリオに基づいてコードの設計を行うには、実際には、我々はOOPモデルに従う必要があります。あるいは、データベース操作中に、例えば、最初のDBConnectionカテゴリを作成します。

public class DBConnection {
   public String getConnection(){
    return "MySQL 数据库连接";
   }
}

ProductDaoカテゴリを作成:

public class ProductDao{
	private DBConnection dbConnection;
	public void setDbConnection(DBConnection dbConnection) {
		this.dbConnection = dbConnection;
	}
	public void addProduct(){
		String conn = dbConnection.getConnection();
		System.out.println("使用"+conn+"增加产品");
	}
}

これは非常に典型的な合成多重化原則のシナリオです。しかし、現在の設計は、のDBConnectionは抽象化ではなく、簡単にシステムの拡張ではありません。現在のシステムは、ビジネスの変化、データベース操作は、Oracleデータベース層を支持することを想定し、MySQLデータベースの接続をサポートしています。もちろん、我々は中のDBConnectionでのOracleデータベースメソッドのサポートを追加することができます。しかし、開閉の原則に反します。実際には、我々はコードダオを変更する必要はありません、のDBConnectionはコードを見て、抽象を変更します:

public abstract class DBConnection {
	public abstract String getConnection();
}

その後、ロジックは、MySQLを引っ張っ:

public class MySQLConnection extends DBConnection {
    @Override
    public String getConnection() {
   		 return "MySQL 数据库连接";
    }
}

Oracleは、論理の支援を再作成します。

public class OracleConnection extends DBConnection {
    @Override
    public String getConnection() {
    	return "Oracle 数据库连接";
    }
}

アプリケーション層への特定の選択は、クラス図を見て:

概要

基本的なデザインパターンを学習し、設計原理を学びます。実際の開発プロセスでは、必ずしもすべてのコードは、設計原理に従うことを要求していない、我々は適切な場面での設計原則に従うことが、人材、時間、コスト、品質、ない完璧の故意追求を考慮する必要があり、トレードオフのようなものを体現、私たちは、よりエレガントなコードの構造を設計するのに役立ちます。

おすすめ

転載: blog.csdn.net/madongyu1259892936/article/details/93632075