Ho avuto una discussione interessante con un collega che ruotava attorno a come le persone interpretano l'uso di proprietà e metodi su un'interfaccia. Ad esempio, supponiamo di avere un blog con post in vari stati: Lavoro e pubblicazione.
Quando in "Working" l'autore sta ancora apportando modifiche e non dovrebbe essere visibile ai lettori. Quando "Pubblicato", beh ... è pubblicato e gli utenti finali possono leggerlo.
Diciamo anche che abbiamo un'interfaccia per il blog, che ho definito come:
public interface IBlog
{
IEnumerable<Post> Posts { get; }
IEnumerable<Post> PublishedPosts { get; }
}
Il mio collaboratore era preoccupato che gli utenti di questa interfaccia potessero interpretare queste due proprietà come raccolte separate di oggetti. Ho capito dal momento che hai una proprietà "Post" e un'altra proprietà chiamata "Post pubblicati" che restituisce lo stesso tipo di oggetto che le persone farebbero l'assunzione corretta che Posts
è una raccolta e PublishedPosts
è una visualizzazione filtrata della raccolta Posts
.
Il suo suggerimento era:
public interface IBlog
{
IEnumerable<Post> Posts { get; }
IEnumerable<Post> GetPublishedPosts();
}
Sostanzialmente, sostituire la proprietà PublishedPosts con un metodo GetPublishPosts (). Ha detto che questo era più idiomatico per C #, perché un metodo comunica alle persone che usano l'interfaccia che stai eseguendo un'operazione sulla raccolta "Post" (filtrandola per stato). Non ho davvero visto alcuna documentazione formale per questo, ma ciò non impedisce alla comunità C # di inclinarsi in una direzione o nell'altra.
Ha una proprietà di raccolta e quindi metodi per filtrare la raccolta o due raccolte in cui la seconda filtra il primo idiomatico per C #? In tal caso, c'è documentazione formale ovunque?