Шаблон репозитория: Один класс репозитория для каждая сущность?

После объявления переменной среды uuid попробуйте объявить другую переменную среды, в которой в качестве ключа используется значение «uuid», а в качестве значения - ответ на запрос:

pm.environment.set(pm.environment.get("uuid"), pm.response)
26
задан Derek Hunziker 19 August 2010 в 17:48
поделиться

4 ответа

У меня был бы один репозиторий / объект, потому что неизменно должна быть карта из моего 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                          
               };           
        }
0
ответ дан James Fleming 28 November 2019 в 17:16
поделиться

Все зависит от того, каким "доменным дизайном" вы собираетесь стать. Вы знаете, что такое агрегированный корень? В большинстве случаев стандартная типизированная команда with может выполнять все ваши базовые функции CRUD. Это начинает иметь значение только тогда, когда у вас появляются толстые модели с контекстом и границами.

5
ответ дан 28 November 2019 в 17:16
поделиться

Вот моя точка зрения. Я строго придерживаюсь шаблона 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);
}

(Надеюсь, мое мнение окажется полезным :))

19
ответ дан 28 November 2019 в 17:16
поделиться

Обычно будет один репозиторий для каждого совокупного корневого объекта. В книге ASP.NET MVC 2 в действии есть несколько интересных моментов о DDD и агрегированном корневом объекте, а также о том, как мы должны проектировать классы репозитория. Посмотрите на нее, если хотите узнать больше. .

1
ответ дан 28 November 2019 в 17:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: