私はクラスDataManipulation
の3つの関数ExtractData
,Validate
、およびFinishForms
を持っています。
すべてのメソッドは、クラスのプライベート変数にアクセスする必要があります(読みやすさのために、ほんの少しの例があります)。多くの共有変数を持つクラスメソッドをリファクタリングするためのデザインパターン
実際のクラスは非常に長く、3つのクラスに分けていきたいと思います。
私はクラスをインスタンス化するために依存関係注入を使用し、3つのメソッドを3つのクラスに分けるだけでかなりの変数を渡すことになります。これは読みやすさには役に立たないと思います。
TL; DR。メソッドが多くの内部変数を操作する非常に長いクラスがあります。メソッドは3つの別々の責任領域にグループ分けできますが、クラスを3つに分割することは多くの内部変数を渡すことを意味します。
私は自分の問題に使う正しいデザインパターンを探しています。
public class DataManipulation
{
private readonly IUnityContainer unity,
private ImportModel VarUsedEverywhere;
//VarUsedEverywhere1 to 10 also defined here
private List<string> _errorMessages = new List<string>();
public DataManipulation(IUnityContainer unity)
{
_unity = unity;
}
public async Task<ImportLogModel> Process(Stream importFile)
{
ExtractData(importFile);
await Validate();
await FinishForms();
return VarUsedEverywhere1;
}
}
。
private bool ExtractData(Stream importFile)
{
for (var row = 1; row <= importFile.MaxDataRow; row++)
{
foreach (var header in importFile.headerMap)
{
var value = importFile.Cells[row, header.Value.Item1].GetUnmergedValue();
VarUsedEverywhere1.rows[row].add(value);
}
}
//Extract more data into VarUsedEverywhere
//Add to _errorMessages if operations do not succeed.
}
。
private bool Validate()
{
if (!VarUsedEverywhere1.Headers.Contains(VarUsedEverywhere2.sourceHeaderKey))
{
_errorMessages.Add(string.Format("Could not find header in Excel file: [{0}]", importMap.sourceHeaderKey));
success = false;
}
//validate data in VarUsedEverywhere1 to 10
//Add to _errorMessages if operations do not succeed.
}
。要求されたよう
private bool FinishForms()
{
foreach (var importMap in VarUsedEverywhere1.importMap.Where(m => m.sort != 0).OrderByDescending(m => Math.Abs(m.sort)))
{
if (importMap.sort > 0)
{
rows = rows.OrderBy(r => r[importMap.sourceHeaderKey]);
}
}
//Order all the values in VarUsedEverywhere
//Add to _errorMessages if operations do not succeed.
}
EDITは、メソッドにコードを追加しました。
あなたが表示したコードには3人のメンバーしかいません。私たちが完全なコードを見ることができない場合、何を示唆するべきかを理解するのは少し難しいです。あなたは[mcve]を投稿できますか? – Enigmativity
これは設計上の質問ですが、私のコードが実際にどのように見えるのかがどうして重要なのかはっきりしません。 私はメソッドから実際のコードをいくつか含めることを試みました。 – Jeppe
だからこそ、私は完全なコードを見たいのですが、私はそれが見えるまでどのように重要かどうか分からないからです。 – Enigmativity