Domanda

I design dei modelli per un dominio, che quasi sempre finiscono per avere alcune funzionalità .IsSomething su di loro. IsNew e IsDirty sono comuni per i dati di persistenza scopi, IsValid per la convalida delle regole di business, anche IsFraudulent in un progetto in corso (convalida più delle regole di business), ecc Ogni volta che vedo queste implementato da altri, essi sono quasi sempre fatto così come metodi. Ma mi chiedo se c'è un motivo particolare per questo.

tendo a vedere le proprietà come descrivere un oggetto e metodi a svolgere qualche tipo di azione. Questi in realtà non eseguire un'azione. Essi coinvolgono codice perché sono determinati dinamicamente quando viene chiamato, e sono chiaramente di sola lettura, ma per me sono ancora in forma come proprietà, piuttosto che metodi.

Ci potrebbe potenzialmente essere un problema di serializzazione con proprietà, suppongo. Anche se un ricco modello di dominio tende a non serializzare bene comunque dato che contiene la logica e la funzionalità, così ogni volta che ho bisogno di muovere qualcosa attraverso un servizio di confine io in genere appiattirlo in una struttura definita DTO prima comunque.

Ma mi chiedo se qualcun altro ha una visione chiara su questo argomento? C'è una buona ragione per implementare questi metodi piuttosto che come proprietà?

(Tangenzialmente legato, anche se una risposta è già stata data , proprietà di estensione sarebbe davvero di aiuto con coerenza su una cosa del genere. ho un certo numero di metodi di estensione IsSomething(), di solito su System.String, per implementare la logica di dominio-specifici. Ma anche se le proprietà sono la strada da percorrere, io voglio attaccare con metodi solo per coerenza con le estensioni.)

È stato utile?

Soluzione

Vorrei utilizzare una proprietà perché:

  1. Si descrive l'oggetto, in qualche modo, in modo concettualmente la sua caratteristica, la sua proprietà

  2. Non chiede alcun parametro

  3. E 'fondamentalmente solo recupera alcuni dati, non compie alcuna azione standalone o modifiche

Altri suggerimenti

Supponendo che l'accesso alla proprietà:

  • non ha effetti collaterali
  • è "ragionevolmente veloce" (sì, molto lanoso ...)

Poi vedo nessun motivo per non renderlo una proprietà. La serializzazione non dovrebbe essere un problema -. Maggior parte dei regimi di serializzazione forniscono modi di marcatura una proprietà come transitoria (vale a dire non-to-be-serializzato)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top