После объявления переменной среды uuid
попробуйте объявить другую переменную среды, в которой в качестве ключа используется значение «uuid», а в качестве значения - ответ на запрос:
pm.environment.set(pm.environment.get("uuid"), pm.response)
У меня был бы один репозиторий / объект, потому что неизменно должна быть карта из моего EntityTable в мой объект домена (например, в теле GetIQueryableCollection (). Как мне удалось написать этот повторяющийся код, так это сделав шаблон T4, чтобы сгенерировать его для меня.
У меня есть пример проекта, который генерирует шаблон хранилища на codeplex http://t4tarantino.codeplex.com/ Пример T4 Toolbox Шаблоны для бизнес-классы и репозиторий. Он может работать не совсем так, как вам хотелось бы, без некоторой настройки, если вы уже не внедрили Tarintino и несколько других полезностей, но шаблоны легко настраиваются.
using System;
using System.Collections.Generic;
using System.Linq;
using Cses.Core.Domain.Model;
using StructureMap;
namespace Cses.Core.Domain
{
/// <summary>
/// Core class for Schedule E
/// </summary>
public class ScheduleERepository : IScheduleERepository
{
private Cses.Core.Repository.SqlDataContext _context = new Cses.Core.Repository.SqlDataContext();
/// <summary>
/// constructor
/// </summary>
public ScheduleERepository() { }
/// <summary>
/// constructor for testing
/// </summary>
/// <param name="context"></param>
public ScheduleERepository(Cses.Core.Repository.SqlDataContext context)
{
_context = context;
}
/// <summary>
/// returns collection of scheduleE values
/// </summary>
/// <returns></returns>
public IQueryable<ScheduleE> GetIQueryableCollection()
{
return from entity in _context.ScheduleEs
select new ScheduleE()
{
Amount = entity.Amount,
NumberOfChildren = entity.NumberChildren,
EffectiveDate = entity.EffectiveDate,
MonthlyIncome = entity.MonthlyIncome,
ModifiedDate = entity.ModifiedDate,
ModifiedBy = entity.ModifiedBy,
Id = entity.Id
};
}
Все зависит от того, каким "доменным дизайном" вы собираетесь стать. Вы знаете, что такое агрегированный корень? В большинстве случаев стандартная типизированная команда with может выполнять все ваши базовые функции CRUD. Это начинает иметь значение только тогда, когда у вас появляются толстые модели с контекстом и границами.
Вот моя точка зрения. Я строго придерживаюсь шаблона Repository. Должно быть 3 метода, которые принимают одну сущность. Добавить, Обновить, Удалить, общее определение.
public interface IRepository<T>
{
void Add(T entity);
void Update(T entity);
void Delete(T entity);
}
Помимо этих методов, вы имеете дело с «запросом» или методом службы. Если бы я был на вашем месте, я бы сделал репозиторий таким, как указано выше, добавил «QueryProvider», как показано ниже, и поместил вашу бизнес-логику туда, где она принадлежит , либо в «Службы», либо в «Команды». / Queries »(взято из CQRS, Google it) .
public interface IQueryProvider<T>
{
TResult Query<TResult>(Func<IQueryable<T>, TResult> query);
}
(Надеюсь, мое мнение окажется полезным :))
Обычно будет один репозиторий для каждого совокупного корневого объекта. В книге ASP.NET MVC 2 в действии есть несколько интересных моментов о DDD
и агрегированном корневом объекте, а также о том, как мы должны проектировать классы репозитория. Посмотрите на нее, если хотите узнать больше. .