Below picture is a simple part of complex algorithm. I try to prepare some classes in accordance with algorithm.
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.
}
}
My question; 1) Do you think clasess compliy with SOLID principels? 2) How can be designed flow better?
Aucun commentaire:
Enregistrer un commentaire