漏洞抽象与性能/功能?

时间:2018-03-29 22:30:56

标签: c# wpf ef-core-2.0

所以我遇到了一些障碍,虽然很小。我想我的漏洞抽象类似于下面的答案:

Leaky abstraction?

我正在使用抽象工厂模式来创建存储库的工厂。这使我能够保持DBContext的轻量级,并且仍然允许我在调用SaveChanges()之前调用存储库中的多个方法。这样做的好处是我可以在保存之前批量处理多个命令。

using System.Collections.Generic;

namespace RouteMiningBLL
{
    public class ZIPCodeInfoService
    {
        private readonly IRouteMiningRepositoryFactory factoryRepository;

        public ZIPCodeInfoService(IRouteMiningRepositoryFactory factoryRepository)
        {
            this.factoryRepository = factoryRepository;
        }

        public IList<ZIPCodeInfo> GetAllZIPCodeInfo(int zipcode, int radius)
        {
            using (IZIPCodeInfoRepository repo = factoryRepository.CreateZIPCodeInfoRepository())
            {
                List<ZIPCodeInfo> zipCodeInfos = new List<ZIPCodeInfo>();

                // Get all zipcodes within radius of zipcode from site
                ZIPCodePage page = new ZIPCodePage();
                IEnumerable<int> zipCodes = page.GetZIPCodes(zipcode, radius);

                foreach (int foundZipcode in zipCodes)
                {
                    zipCodeInfos.Add(GetZIPCodeInfo(foundZipcode));
                }

                repo.SaveChanges();

                return zipCodeInfos;
            }
        }
    }
}

上面是我当前的实现,但它需要IRouteMiningRepositoryFactory来实现IDisposable,这显然是一个泄漏抽象。我想弄清楚的是如何处理这个问题?

在此之前,我刚刚在工厂内处理了DBContext。但是,这需要我使用每个Repository方法调用创建一个新的DBContext(根本不是一个大问题),但这会强迫我在每个存储库方法的末尾调用dbContext.SaveChanges()(因此,不要让我批处理工作)。我坚持如何处理Leaky抽象与批处理。

在任何一种情况下,我都会有一个漏洞抽象,因为需要处理DBContext。它只会改变发生的位置(BLL vs DAL)。谢谢!

0 个答案:

没有答案