아래 그림은 복잡한 알고리즘의 간단한 부분입니다. 알고리즘에 따라 일부 클래스를 준비하려고합니다.어떻게 조정할 수/조정 알고리즘
abstract class Person
{
public string HasXRecords { get; set; }
public int PersonAnotherFeature { get; set; }
public List<X> Xs { get; set; } = new List<X>();
}
abstract class X
{
//There will more than 1000 type subX classes
}
interface IAdder
{
void AddXToList();
}
interface IRemover
{
void RemoveXFromList();
}
class XAdderFactory
{
private Person _person;
public bool PersonHasNoRecords
{
get
{
return string.IsNullOrEmpty(_person.HasXRecords);
}
}
public XAdderFactory(Person person)
{
this._person = person;
if (PersonHasNoRecords)
{
new XListMakerAFactory(person);
}
else
{
new XListMakerB(person);
}
}
}
class XListMakerB: IAdder
{
private Person _person;
public XListMakerB(Person person)
{
this._person = person;
AddXToList();
new PersonXListEvaluator(person);
}
public void AddXToList()
{
//Dynamic instance of X will be added in to person Xlist.
}
}
class XListMakerAFactory
{
public XListMakerAFactory(Person person)
{
switch (person.PersonAnotherFeature)
{
case 1:new XListMakerA1(person);
break;
//there will be XListMakerA2,XListMakerA3 etc.
}
new XRemoverFactory(person);
}
}
class XListMakerA1: IAdder
{
private Person _person;
public XListMakerA1(Person person)
{
this._person = person;
AddXToList();
new PersonXListEvaluator(person);
}
public void AddXToList()
{
//_person.Xs.Add(new X1());
// According to business logic,X2,X3 etc. will be added manually.
}
}
class XRemoverFactory
{
public XRemoverFactory(Person person)
{
new XRemoverFromList1(person);
new XRemoverFromList2(person);
}
}
class XRemoverFromList1 : IRemover
{
private Person _person;
public XRemoverFromList1(Person person)
{
this._person = person;
RemoveXFromList();
}
public void RemoveXFromList()
{
//According some business logic some Xs will be removed.
}
}
class XRemoverFromList2 : IRemover
{
private Person _person;
public XRemoverFromList2(Person person)
{
this._person = person;
RemoveXFromList();
}
public void RemoveXFromList()
{
//According some business logic some Xs will be removed.
}
}
class PersonXListEvaluator
{
public PersonXListEvaluator(Person person)
{
//According to business rules evaluation will be cordinated.
}
}
내 주요 관심사는 algorithm.I 그 다음 단계 공장 한 후 그 수준에서 인스턴스화되어야합니다 (같은 수준에서) 어떤 클래스를 결정합니다 수준의 팩토리 메소드를 설계하려고 SUCCES하는 수업을 통해 많이 관리하는 것입니다 메소드는 인스턴스화됩니다. 플로우는 레벨 팩토리 메소드의 생성자에서 관리됩니다. 이것이 관리 가능하고 메인 테이블이라고 생각하십니까? 더 나은 솔루션을 제공합니까?
http://codereview.stackexchange.com/ 질문입니다. – jaco0646
이 링크를 발견했습니다. https://msdn.microsoft.com/en-us/library/ff650706.aspx – Mehmet