2009-02-17 11 views
9

Ho un'interfaccia nel livello di servizio con diversi metodi che iniziano con Get e FxCop's Usa proprietà laddove la regola si lamenta che dovrei considerare l'utilizzo delle proprietà.FxCop: utilizzare le proprietà appropriate.

Ho provato a utilizzare SuppressMessageAttribute ma quando è definito sull'interfaccia non ha alcun effetto sui metodi dei membri. Devo mettere SuppressMessageAttribute a ogni metodo o esiste un modo per sopprimere CA1024 per un intero tipo?

[SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate"] 
public interface IProjectService 
{ 
    // Information and statistics about projects 
    IList<ProjectInfo> GetProjects(); 
    ProjectsDashboard GetProjectsDashboard(); 

    // Project's settings 
    ProjectSettings GetProjectSettings(Guid id); 

    void SaveProjectSettings(ProjectSettings settings); 
} 

risposta

3

È necessario aggiungere l'attributo per ciascun metodo.

1

Dovrai applicarlo a tutti i metodi, sfortunatamente.

Inoltre, non vedo alcun motivo per avere i tuoi metodi Get. Perché non solo avere proprietà di sola lettura, almeno per ProjectsDashboard e IList<ProjectInfo>. Quelle non mi colpiscono come implementazioni che potrebbero modificare lo stato dell'implementazione e dovrebbero probabilmente essere proprietà comunque.

Il ProjectSettings dovrebbe anche restituire una raccolta indicizzata che sembrerebbe pure.

+0

Il livello di servizio chiama i metodi dal livello dati in modo che questi metodi possano avere risultati diversi anche quando il chiamante non modifica lo stato dell'oggetto. Chiamarli può essere costoso, quindi ho usato i metodi lì. –

4

Capisco la necessità di utilizzare i metodi qui. Se è vero che questi metodi probabilmente non cambiano lo stato, l'uso di un metodo suggerisce un'operazione lunga/esterna, che è probabilmente il caso attraverso i metodi della classe di servizio.

Non è possibile rinominare i metodi in LoadProjectSettings?

In caso contrario, sarà necessario aggiungere l'attributo a ciascun metodo o disabilitare la regola.

+0

Il prefisso Load è una buona idea, ma può essere impossibile rinominare i metodi quando qualcun altro ha già implementato un'interfaccia. Questo è solo il mio progetto personale quindi posso refactoring. Ma personalmente mi piace di più la versione Get. –

+0

Beh, se vuoi chiamarlo contro le regole di FxCop, devi solo tenerlo con l'avvertimento. O disabilitarlo in generale o disattivarlo ogni volta che lo si utilizza in loco :) – Bertvan

+0

Penso che questa regola sia veramente buona ma semplicemente non voglio nell'interfaccia di livello :) Non è perché Scope = "membro" non funziona :( –

Problemi correlati