最初に、明白なことを言う危険性があります。メソッドではなく、神オブジェクトです。
しかし、他のメソッドを呼び出すため、膨大な量のパラメータを必要とするメソッドにつながる可能性があります。それは恐らくすべてを神の目的に置くためのインスピレーションでした。あまりにも多くのパラメータを持つこのようなメソッドの簡略化した例を示します。あなたは
public void PrintFilteredReport(
Data data, FilterCriteria criteria, ReportFormat format)
{
var filteredData = Filter(data, criteria);
PrintReport(filteredData, format);
}
:-)ここでは「あまりにも多くの」== 3は、そこで問題は、私たちが神のオブジェクトに頼ることなく、パラメータの量を減らすことができる方法であることを想像する必要がありますか?答えは、手続き型プログラミングを取り除き、オブジェクト指向設計を有効に活用することです。オブジェクトは、彼らの協力者を初期化するために使用されたパラメータを知らなくても、お互いを使用することができます。
// dataFilter service object only needs to know the criteria
var dataFilter = new DataFilter(criteria);
// report printer service object only needs to know the format
var reportPrinter = new ReportPrinter(format);
// filteredReportPrinter service object is initialized with a
// dataFilter and a reportPrinter service, but it doesn't need
// to know which parameters those are using to do their job
var filteredReportPrinter = new FilteredReportPrinter(dataFilter, reportPrinter);
今FilteredReportPrinter.Print方法は、一つのパラメータのみで実現することができます。この、
ちなみに
public void Print(data)
{
var filteredData = this.dataFilter.Filter(data);
this.reportPrinter.Print(filteredData);
}
懸念と依存性注入の分離のようなものは、単にパラメータを削除するだけではありません。協力者は、インタフェースを介してオブジェクトにあなたがアクセスした場合、それはあなたのクラスになり
- 非常に柔軟性:あなたが想像できる任意のフィルタ/プリンタの実装とFilteredReportPrinterを設定することができます
- 非常にテスト可能:あなたは缶詰とモック協力者に渡すことができますそれらが正しくユニットテストで使用されたことを確認してください。
"パラメータ"は構成オブジェクトですか? –
はい、そうです。ビジネスレイヤーに必要なパラメータをUIに持たせるために使用されます。 –