Sto cercando di accertare se l'uso di più riferimenti alla stessa proprietà sia l'odore del codice / un anti-modello, in base alle esigenze dell'organizzazione.
Ad esempio, prendi in considerazione:
abstract class Person {
public string Title { get; set; }
public string Forename { get; set; }
public string MiddleNames { get; set; }
public string Surname { get; set; }
public string GivenName { get { return Forename; } set { Forename = value; } }
public string FamilyName { get { return Surname; } set { Surname = value; } }
public string FirstName { get { return Forename; } set { Forename = value; } }
public string LastName { get { return Surname; } set { Surname = value; } }
}
Come puoi vedere, ho diverse altre proprietà, aliasing (tipo di) o dare nomi alternativi alle proprietà nell'oggetto, ma fondamentalmente ripetendo esattamente la funzionalità della proprietà di base senza eccezioni.
Le ragioni alla base di questo sono le convenzioni di denominazione utilizzate in diverse aree dell'organizzazione; sta fornendo molteplici modi di indirizzare le stesse informazioni, consentendo a ciascuna area diversa di utilizzare il loro metodo di accesso preferito. Poiché ciascuna delle altre proprietà fa riferimento alla proprietà di base, tutte le modifiche programmatiche devono essere incluse solo nella suddetta proprietà di base.
E così per chiarire ...
@GregBurghardt ha gentilmente postato delle alternative ai miei enigmi, ma sento che devo qualificare un po 'di più le mie affermazioni.
In VB.NET posso tranquillamente codificare le interfacce nelle mie classi, ma usare nomi alternativi nell'effettiva implementazione dei membri, come ad esempio ...
Public Interface IPerson
Property Forename() As String
Property Surname() As String
End Interface
Public Class BillingPerson
Implements IPerson
Public Property GivenName() As String Implements IPerson.Forename
...
Public Property FamilyName() As Int32 Implements IPerson.Surname
....
End Class
Si noti, qui, che ho usato un nome di proprietà diverso per la proprietà (VB), ma ho ancora implementato il vero nome dell'interfaccia (es. Proprietà pubblica GivenName () As String Implementa IPerson.Forename ). Ciò significa che posso fare riferimento alla mia classe BillingPerson
, nonostante le ovvie differenze del nome della proprietà, utilizzando l'interfaccia ...
'Define our interface type object here...
Dim myP As IPerson = New BillingPerson()
'Assign values directly to the interface members...
myP.Forename = "Fred"
myP.Surname = "Bloggs"
'Output the interface members...
Console.WriteLine(myP.Forename & " " & myP.Surname)
... oppure posso riferirmi direttamente alla classe originale ....
'Define our BillingPerson object here...
Dim myP As BillingPerson
'Assign values directly to the interface members...
myP.GivenName = "Fred"
myP.FamilyName = "Bloggs"
'Output the interface members...
Console.WriteLine(myP.Forename & " " & myP.Surname)
Utilizzando questa metodologia, il mio problema sarebbe molto breve e sarei in grado di creare tutte le classi basate sull'interfaccia di cui ho bisogno.
Questo non sembra funzionare allo stesso modo in C #, tuttavia, in cui non posso direttamente alias il nome dei membri dell'interfaccia.