Sto lavorando a un progetto personale che funziona con i database, e in questo progetto ho un insieme di classi che sono simili , quindi ereditano da una classe base comune. Il problema che ho di fronte è che ho la sensazione fastidiosa che i nomi delle classi che derivano dalla classe base non riflettano realmente quello che sono in realtà.
Avvertenza: Si prega di ignorare il fatto che questa sembra una reinvenzione della ruota. Questo è il punto del progetto.
La classe base comune è chiamata Entità. Il suo scopo è quello di servire come base per:
- Classi che descrivono i dati restituiti da una query SQL o stored procedure o
- Classi che descrivono una query SQL o una stored procedure e i relativi parametri.
Entrambe queste classi sono create dai consumatori dell'assembly per descrivere le stored procedure e le query nel loro database e i dati che recupereranno da esso.
Ad esempio, questi sono progettati per funzionare contro il database Northwind:
public class Employee : DataEntity
{
public int EmployeeId { get; set; }
public string LastName { get; set; }
public string FirstName { get; set; }
}
[Sql(@"SELECT [EmployeeId], [LastName], [FirstName]
FROM [Employees]
ORDER BY [LastName], [FirstName]")
public class SelectEmployee : SqlEntity
{
public int EmployeeId { get; set; }
}
Allo stato attuale, attualmente sto chiamando la prima di queste entità di dati e le seconde entità SQL. Tuttavia, non sono del tutto sicuro che questi siano termini adatti. Ad esempio, sono in realtà modelli ? C'è un termine migliore che non sto considerando?
L'assembly considera solo le proprietà pubbliche che hanno sia un getter che un setter. Lo sviluppatore può aggiungere qualsiasi altra cosa se è necessario. Quindi un'entità dati può essere estesa per includere funzionalità aggiuntive.
Qualsiasi consiglio sarebbe molto apprezzato.
Modifica
Vale la pena notare che puoi anche modellare le stored procedure con questa roba (di nuovo, usando una procedura memorizzata nel database Northwind):
[Sql()]
public class CustOrderHist
{
[Parameter("@CustomerId", SqlDbType = SqlDbType.NChar, MaxLength = 5)]
public string CustomerId { get; set; }
}
L'assembly associa automaticamente le classi alle stored procedure e le proprietà ai parametri.