Va bene per un'interfaccia comunicare solo la metà di come dovrebbe funzionare qualcosa?

1

Ho un servizio in cui determinati altri servizi possono segnalare il loro stato. Per stato non intendo se sono in esecuzione o meno, ma se hanno ricevuto dati. Il punto è che altri servizi possono chiedere se i dati di cui hanno bisogno sono stati ricevuti.

Ho due possibili opzioni per implementarlo.

Uno è il seguente:

public interface IDataPrerequisiteFulfillmentService
{
    bool ArePrerequisitesFulfilled(params DataPrerequisite[] dataPrerequisites);
    void ReportDataPrerequisiteFulfilled(DataPrerequisite dataPrerequisite);
}

Tuttavia, ciò significherebbe che avrei bisogno di una dipendenza extra in qualsiasi servizio che deve segnalare a questo servizio. Alcuni servizi hanno già più dipendenze e mi piace mantenere le dipendenze al minimo.

Un altro modo per avvicinarsi a questo sarebbe quello di fare quanto segue:

public interface IDataPrerequisiteFulfillmentService
{
    bool ArePrerequisitesFulfilled(params DataPrerequisite[] dataPrerequisites);
}

public interface IDataPrerequisiteService
{
    event EventHandler<DataPrerequisiteEventArgs> PrerequisiteFulfilled;
}

public class DataPrerequisiteFulfillmentService : IDataPrerequisiteFulfillmentService
{
    private IList<DataPrerequisite> fulfilledPrerequisites = new List<DataPrerequisite>();

    public IDataPrerequisiteFulfillmentService(IEnumerable<IDataPrerequisiteService> services)
    {
        // receive services via injection
        foreach (var service in services)
        {
            service.PrerequisiteFulfilled += (s, e) => 
            {
                _fulfilledPrerequisites.Add(e.DataPrerequisite);
            }
        }
    }

Preferisco l'opzione 2. Inverte anche le dipendenze. Tuttavia, rende un'interfaccia che non comunica il fatto che anche l'implementazione di IDataPrerequisiteFulfillmentService avrà bisogno di input.

    public bool ArePrerequisitesFulfilled(params DataPrerequisite[] dataPrerequisites)
    {
        // check _fulFilledPrerequisites here
    }
}

Va bene avere un'interfaccia che comunichi solo la metà di come funziona l'implementazione?

    
posta Peter 11.12.2014 - 11:38
fonte

1 risposta

2

È assolutamente bene avere un'interfaccia che non comunica come funziona l'implementazione. In effetti questo è il punto di un'interfaccia, per nascondere i dettagli di implementazione!

La tua seconda opzione va bene in questo scenario.

    
risposta data 11.12.2014 - 11:53
fonte

Leggi altre domande sui tag