Разделям логиката на моя домейн от логиката на моята уеб услуга
Това е от моя домейн и всъщност получава данните от nHibernate
public static IList<Location> LoadReturnLocationsFromDatabase(DateTime lastUpdateTime)
{
using (var session = NHibernateHelper.OpenSession())
{
// retreive all stores and display them
using (session.BeginTransaction())
{
var locations = session.CreateCriteria(typeof(Location)).Add(Expression.Gt("LastUpdatedTime", lastUpdateTime)).SetMaxResults(10).List<Location>();
return locations;
}
}
}
След това тези данни се връщат към уеб услугата и аз използвам Automapper, за да ги дублирам, така че да не излагам обекта за достъп до базата данни на уеб услугата и да запазя всички неща отделно.
public IList<GetLocationDetailsResponse> GetLocationUpdate(DateTime lastUpdateTimeDT)
{
Mapper.CreateMap<Location, GetLocationDetailsResponse>();
IList<Location> locations = WhygoDomain.GetLocations.LoadReturnLocationsFromDatabase(lastUpdateTimeDT);
IList<GetLocationDetailsResponse> getLocationDetails = Mapper.Map<IList<Location>, IList<GetLocationDetailsResponse>>(locations);
return getLocationDetails;
}
Проблемът ми е, че не мога да направя картографирането, освен ако не уточня, че връзката между местоположение и състояние не е заредена лениво, тъй като уеб услугата е извън:
using (var session = NHibernateHelper.OpenSession())
в областта на данните.
Мързеливото зареждане изглежда е предпочитаният метод за правене на нещо подобно, така че се чудя дали този подход е добре? Това е услуга за експортиране на данни, която ще експортира, така че използването на паметта и т.н. може да се окаже проблематично.
Ако трябва да променя това, причината за проблема ли е структурата на моя код? Ако е така, как мога да запазя логиката на домейна си отделна и да заобиколя този проблем?