【发布时间】:2017-01-02 22:04:17
【问题描述】:
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.
}
}
我主要关心的是管理很多类以成功算法。我尝试设计该级别的工厂方法将决定哪个类(在同一级别)必须在该级别实例化在下一级工厂方法实例化之后。流程在关卡工厂方法的构造函数中进行管理。您认为这是可管理、可维护的吗?您提供更好的解决方案吗?
【问题讨论】:
-
这看起来像是一个codereview.stackexchange.com 问题。
标签: design-patterns business-logic business-rules business-logic-layer