Wie kann man vermeiden, eine Anforderungsklasse zu erweitern, wenn neue Verbraucher hinzugefügt werden?C#

Ein Treffpunkt für C#-Programmierer
Guest
 Wie kann man vermeiden, eine Anforderungsklasse zu erweitern, wenn neue Verbraucher hinzugefügt werden?

Post by Guest »

Ich habe ein System, bei dem mehrere Verbraucher (z. B. Preisrechner) Prozessanforderungen basierend auf bestimmten Einschränkungen. Jeder Verbraucher hat unterschiedliche Anforderungen, was bedeutet, dass er nur eine Teilmenge der verfügbaren Daten benötigt. Zum Beispiel: < /p>

Verbraucher A stützt sich stark auf ein bestimmtes Feld. als Verbraucher A plus ein anderer. Zustand. < /li>
< /ul>
EG: < /p>

Code: Select all

public interface IRequestProcessor
{
double ComputeResult(RequestData request);
}

class ConsumerA : IRequestProcessor
{
public double ComputeResult(RequestData request)
=> 10 * request.SomeValue + request.BaseCost;
}

class ConsumerB : IRequestProcessor
{
public double ComputeResult(RequestData request)
=> (request.SomeCondition ? 10 : 0) * request.SomeValue + request.BaseCost;
}

class ConsumerC : IRequestProcessor
{
public double ComputeResult(RequestData request)
=> request.HasDetail ? 1.5 * request.BaseCost : request.BaseCost;
}

class ConsumerD : IRequestProcessor
{
public double ComputeResult(RequestData request)
=> request.DueDate < DateTime.Now.AddMonths(6)
? -1
: request.HasDetail ? 1.5 * request.BaseCost : request.BaseCost;
}
und die RequestData Klasse:

Code: Select all

class RequestData
{
public double BaseCost { get; }    // Used by all Consumers
public double SomeValue { get; }   // Used by Consumer A & B
public bool SomeCondition { get; } // Used by Consumer B
public bool HasDetail { get; }     // Used by Consumer C & D
public DateTime DueDate { get; }   // Used by Consumer D
}
Jedes Mal, wenn ich einen neuen Verbraucher hinzufüge, muss ich RequestData ändern, um neue Felder einzuführen. Dies führt zu: < /p>

Wachstumskomplexität: Die RequestData < /code> -Klasse wächst weiter. < /Li>
Unbenutzte Daten: Die meisten Verbraucher benötigen nur eine Teilmenge der Felder, wodurch es
inefficienziell erstellt wird Besseres Design?
Obwohl meine aktuelle Implementierung in C#ist, begrüße ich einen allgemeinen Entwurfsmuster oder architektonischen Ansatz, um dieses Problem zu lösen.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post