Vincolo e documentazione interfacce

rated by 0 users
This post has 3 Replies | 1 Follower

Top 10 Partecipanti
Maschio
Post 268
Punteggio 4.907
petrux Posted: 02-09-2010 19.47
Ciao a tutti,

Ho una applicazione in cui un componente ha più o meno questa forma:

//questa è la entity base, serve giusto per capire
//quello che viene in seguito;
interface IEntity {
object Key { get; }
}

interface IContextProvider {
IContext GetCurrent(); }

interface IContext {
IFooStage Stage { get; }
IBarService Bar { get; } }

interface IFooStage {
void Stage(IEntity e);
bool Unstage(IEntity e); }

interface IBarService {
double Apply(IEntity e);
}

Ora, il vincolo che devo imporre è che il metodo IBarService.Apply()
accetti solo IEntity che sono già state precedentemente inserite nel
IFooStage contestuale (tramite IContext) a IBarService. Le domande sono:

1. Ha senso? :-)
2. Come faccio a documentare una cosa del genere nel metodo
IBarService.Apply()? Devo introdurre in IBarService e IFooStage una
property IContext per dare senso alla cosa?
3. L'alternativa è quella di collassare le interfacce di IFooStage e
IBarService in IContext e avere:

interface IContext {
void Stage(IEntity e);
bool Unstage(IEntity e);
double Apply(IEntity e);
}

ma in questo modo non si vìolerebbe il Single Responsability Principle?

Grazie in anticipo e buona serata,
Giulio - petrux

--
  • | Punteggio Post: 20
Top 10 Partecipanti
Post 143
Punteggio 2.560
Ciao Giulio,

You wrote on 09/02/2010 :
> //questa è la entity base, serve giusto per capire
> //quello che viene in seguito;
> interface IEntity {
> object Key { get; }
> }
>
> interface IContextProvider {
> IContext GetCurrent(); }
>
> interface IContext {
> IFooStage Stage { get; }
> IBarService Bar { get; } }
>
> interface IFooStage {
> void Stage(IEntity e);
> bool Unstage(IEntity e); }
>
> interface IBarService {
> double Apply(IEntity e);
> }
>
> Ora, il vincolo che devo imporre è che il metodo IBarService.Apply()
> accetti solo IEntity che sono già state precedentemente inserite nel
> IFooStage contestuale (tramite IContext) a IBarService. Le domande sono:
>
> 1. Ha senso? :-)

perch� no?

> 2. Come faccio a documentare una cosa del genere nel metodo
> IBarService.Apply()? Devo introdurre in IBarService e IFooStage una
> property IContext per dare senso alla cosa?

difficile "documentare"/esplicitare questa cosa direttamente sull'API,
non saprei. Io non aggiungerei nulla e mi limiterei a descrivere lo
scenario nella ducumentazione e ad "esporre" le exception de caso nel
momento in cui il chiamante non rispett i vincoli.

> 3. L'alternativa è quella di collassare le interfacce di IFooStage e
> IBarService in IContext e avere:
>
> interface IContext {
> void Stage(IEntity e);
> bool Unstage(IEntity e);
> double Apply(IEntity e);
> }
>
> ma in questo modo non si vìolerebbe il Single Responsability Principle?

abbastanza, ma non � detto che sia un problema. Comunque non lo vedo
come una soluzione in questo caso.

..m

--
Mauro Servienti
{C67C0157-5D98-4733-A75E-93CAEE4BADC8}
Microsoft MVP - Visual C# / MCP
http://mvp.support.microsoft.com
http://blogs.ugidotnet.org/topics
whynot [ at ] topics [ dot ] it
  • | Punteggio Post: 20
Top 10 Partecipanti
Maschio
Post 268
Punteggio 4.907
Ciao Mauro,

as usual, grazie della risposta.

mauroservienti wrote:
> perché no?

Uhm... direi che è già un passo avanti?

> difficile "documentare"/esplicitare questa cosa direttamente sull'API,
> non saprei. Io non aggiungerei nulla e mi limiterei a descrivere lo
> scenario nella ducumentazione e ad "esporre" le exception de caso nel
> momento in cui il chiamante non rispett i vincoli.

Si, ok: intendevo questo.
Nel senso che mel metodo IBarService.Apply(IEntity e) ci va un bel
"throws an InvalidOperationExceoption if the given entity has not been
stage yet in the contextal IFooStage instance". Right?

> abbastanza, ma non � detto che sia un problema.

Non saprei. Di fatto *è* un problema nella misura in cui le cose possano
cambiare o - come nel mio caso reale - le interfacce (e quindi le
responsabilità che descrivono) siano ben più complesse. ;-)

> Comunque non lo vedo
> come una soluzione in questo caso.

+1
Ciao e buona giornata,
Giulio

--
  • | Punteggio Post: 20
Top 10 Partecipanti
Post 143
Punteggio 2.560
Ciao Giulio,

You wrote on 10/02/2010 :
> as usual, grazie della risposta.

� sempre un piacere, le domande meritano :-)

>> difficile "documentare"/esplicitare questa cosa direttamente sull'API,
>> non saprei. Io non aggiungerei nulla e mi limiterei a descrivere lo
>> scenario nella ducumentazione e ad "esporre" le exception de caso nel
>> momento in cui il chiamante non rispett i vincoli.
>
> Si, ok: intendevo questo.
> Nel senso che mel metodo IBarService.Apply(IEntity e) ci va un bel
> "throws an InvalidOperationExceoption if the given entity has not been
> stage yet in the contextal IFooStage instance". Right?

si esattamente.

>> abbastanza, ma non � detto che sia un problema.
>
> Non saprei. Di fatto *è* un problema nella misura in cui le cose possano
> cambiare o - come nel mio caso reale - le interfacce (e quindi le
> responsabilità che descrivono) siano ben più complesse. ;-)

concordo, ma credo che l'unica soluzione sia una documentazione degna
del suo nome, oltre che uno studio approfondito dell'API che esponi che
non pu� fare tutto ma se � "parlante" sicuramente aiuta ;-)

> Ciao e buona giornata,

buona... non so che cosa, dipende da quando arriver� il post :-)

> Giulio
> --

..m

--
Mauro Servienti
{C67C0157-5D98-4733-A75E-93CAEE4BADC8}
Microsoft MVP - Visual C# / MCP
http://mvp.support.microsoft.com
http://blogs.ugidotnet.org/topics
whynot [ at ] topics [ dot ] it
  • | Punteggio Post: 5
Pagina 1 di 1 (4 elementi) | RSS
Powered by Community Server (Commercial Edition), by Telligent Systems