Ik ben op dit moment een ASP.NET website aan het bouwen en ik wil deze netjes in lagen opdelen. Ik maak op dit moment gebruik van een presentatie laag, service laag en een dataaccess laag.
Voor het genereren van de Dal maak ik gebruik van subsonic. Subsonic maakt gebruik van het active record pattern en daarom zitten er in de business objecten functies als bijv. save en delete. Ook bevinden deze business objecten zicht noodgedwongen in de dataaccess laag. Ik wil echter wel voorkomen dat een programmeur in de presentatie laag Object.Save kan doen. Mijn idee is nu om een eigen business laag in te bouwen met business objecten met hierin alleen properties. En deze objecten door te gaan geven vanuit de dataaccess laag. Subsonic faciliteert dit op zich ook door de methode ExecuteTypedList<T>().
Mijn vraag komt eigenlijk neer op: Is dit een acceptabele manier van werken of moet ik gewoon de right tool for the right job gebruiken en gaan voor nhibernate (wat ik liever niet wil omdat ik dit wel heel makkelijk vind werken). Aan de andere kant wil ik subsonic ook weer niet op een heel ongebruikelijke manier implementeren. Kortom, even klankborden
Onderstaande repository bevind zich dan in de dataaccess laag en mapt dan min of meer tussen subsonic objecten en mijn eigen business objecten.
Ik weet trouwens dat je met subsonic ook repositories kunt genereren maar dan kan je nog steeds vanuit elke laag waar je je business objecten gebruikt database functionaliteit aanroepen.
Voor het genereren van de Dal maak ik gebruik van subsonic. Subsonic maakt gebruik van het active record pattern en daarom zitten er in de business objecten functies als bijv. save en delete. Ook bevinden deze business objecten zicht noodgedwongen in de dataaccess laag. Ik wil echter wel voorkomen dat een programmeur in de presentatie laag Object.Save kan doen. Mijn idee is nu om een eigen business laag in te bouwen met business objecten met hierin alleen properties. En deze objecten door te gaan geven vanuit de dataaccess laag. Subsonic faciliteert dit op zich ook door de methode ExecuteTypedList<T>().
Mijn vraag komt eigenlijk neer op: Is dit een acceptabele manier van werken of moet ik gewoon de right tool for the right job gebruiken en gaan voor nhibernate (wat ik liever niet wil omdat ik dit wel heel makkelijk vind werken). Aan de andere kant wil ik subsonic ook weer niet op een heel ongebruikelijke manier implementeren. Kortom, even klankborden
Onderstaande repository bevind zich dan in de dataaccess laag en mapt dan min of meer tussen subsonic objecten en mijn eigen business objecten.
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| using System; using System.Collections.Generic; using System.Text; using TestWeb.DataAccess.Interfaces; using TestWeb.DataAccess.Data.Sub.Generated; namespace TestWeb.DataAccess.Data.Sub { public class SubSonicEmployeeReposistory : IEmployeeRepository { public IList<TestWeb.Business.Models.Employee> GetEmployees() { throw new Exception("The method or operation is not implemented."); } public IList<TestWeb.Business.Models.Employee> GetEmployeesByGender(string gender) { return DB. Select("EmployeeKey", "FirstName"). From<DimEmployee>(). Where(DimEmployee.Columns.Gender).IsEqualTo(gender). OrderAsc("FirstName"). ExecuteTypedList<TestWeb.Business.Models.Employee>(); } public TestWeb.Business.Models.Employee SaveEmployee(TestWeb.Business.Models.Employee employee) { DimEmployee emp = new DimEmployee(); emp.FirstName = employee.FirstName; emp.Save(); employee.EmployeeKey = emp.EmployeeKey; return employee; } } } |
Ik weet trouwens dat je met subsonic ook repositories kunt genereren maar dan kan je nog steeds vanuit elke laag waar je je business objecten gebruikt database functionaliteit aanroepen.
[ Voor 0% gewijzigd door Brakkie op 16-01-2009 16:12 . Reden: typfout ]