问题列表 - 第12875页

DDD:实体的集合和存储库

假设我有

public class Product: Entity
{
   public IList<Item> Items { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

假设我想找到一个带有最大值的项...我可以添加方法Product.GetMaxItemSmth()并使用Linq(from i in Items select i.smth).Max())或手动循环或其他任何方法.现在,问题是这会将完整的集合加载到内存中.

正确的解决方案是执行特定的数据库查询,但域实体无法访问存储库,对吧?所以我要么

productRepository.GetMaxItemSmth(product)
Run Code Online (Sandbox Code Playgroud)

(这很丑陋,没有?),或者即使实体有权访问存储库,我也使用IProductRepository实体

product.GetMaxItemSmth() { return Service.GetRepository<IProductRepository>().GetMaxItemSmth(); }
Run Code Online (Sandbox Code Playgroud)

这也是丑陋的,是代码的重复.我甚至可以去看看并进行扩展

public static IList<Item> GetMaxItemSmth(this Product product)
{
   return Service.GetRepository<IProductRepository>().GetMaxItemSmth();
}
Run Code Online (Sandbox Code Playgroud)

哪个更好只是因为它并没有真正使存储库中的实体混乱......但仍然是方法重复.

现在,这是是否使用product.GetMaxItemSmth()productRepository.GetMaxItemSmth(product)再次使用的问题.我错过了DDD的东西吗?这里的正确方法是什么?刚用productRepository.GetMaxItemSmth(product)?这是每个人都使用和满意的吗?

我只是感觉不对...如果我无法Items从产品本身访问产品,为什么我需要这个系列呢Product?然后,Product如果它不能使用特定的查询并访问其集合而没有性能命中,可以做任何有用的事情吗?

当然,我可以使用效率较低的方式,而且从不介意,当它很慢时,我会将存储库调用作为优化注入实体......但即使这听起来也不对,是吗?

有一点要提一下,也许它不是DDD ......但我需要在Product中使用IList才能获得使用Fluent NHibernate生成的数据库模式.不过,请在纯DDD环境中自由回答.

更新:这里描述了一个非常有趣的选项:http://devlicio.us/blogs/billy_mccafferty/archive/2007/12/03/custom-collections-with-nhibernate-part-i-the-basics.aspx,不仅处理与DB相关的集合查询,也可以帮助进行集合访问控制.

c# domain-driven-design

13
推荐指数
2
解决办法
4359
查看次数

如何设置Thread.CurrentPrincipal以在整个应用程序中使用?

在ASP.net应用程序中,我正在使用我编写的自定义成员资格提供程序的Login控件.我想要做的是Thread.CurrentPrincipal在用户通过身份验证后设置为我的自定义Principal对象.

我正在使用setter:Thread.CurrentPrincipal它为我设置了Principal对象,但是在所有后续线程上,这个CurrentPrincipal被默认值覆盖.

这是我的Login控件的Authenticate事件的代码:

protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
    {
        string username = Login1.UserName;
        string password = Login1.Password;

        if (Membership.ValidateUser(username, password))
        {
            var login = sender as Login;
            var phoenixIdentity = new PhoenixIdentity("B", "Forms" , true);
            var principal = new PhoenixPrincipal(phoenixIdentity);

            Thread.CurrentPrincipal = principal;
            AppDomain.CurrentDomain.SetThreadPrincipal(principal);

            HttpContext.Current.User = principal;

            e.Authenticated = true;
        }
    }
Run Code Online (Sandbox Code Playgroud)

例如,假设我使用用户名A登录,一切顺利......验证通过,但我使用Identity对象中的用户名B对用户进行硬编码,该对象设置为我设置为CurrentPrincipal对象的Principal 对象.

当我CurrentPrincipal在此方法结束时检查哪个用户设置为Identity时,它表示它是用户B.但是当我加载另一个页面然后检查其身份CurrentPrincipal是什么时,它表示它是用户A.

那么,如何让我的CurrentPrincipal对象在所有其他线程中保持持久性,以及此Login控件何时/何时设置CurrentPrincipalThread 的对象?

asp.net authentication identity principal

5
推荐指数
1
解决办法
1万
查看次数

如何在内存卸载后重新加载UIView?

我的主视图控制器(代表我的应用程序中的主菜单)有一个简单的UIView,带有一些子视图.我正在使用模态类型的设计模式,并在最终返回主菜单之前切换到多个其他视图控制器.问题是,在我的其他视图控制器(不是主菜单)中,我经常加载数据量大的图像等有时会导致主菜单(当前不在屏幕上)卸载其视图以响应记忆警告.问题是,当我最终切换回我的主菜单时,屏幕全是黑色的,除了几个UILabel之外都已经取消了.此时,我想重新加载我的视图并重新开始.但是在文档中,它说你永远不应该直接调用-loadView.如何重新加载我的视图?

memory iphone uiviewcontroller uikit uiview

0
推荐指数
1
解决办法
1914
查看次数

ruby datetime中是否有add_days?

在C#中,DateTime类中有一个方法AddDays([天数]).

红宝石中有这样的方法吗?

ruby

44
推荐指数
5
解决办法
5万
查看次数

如何使用Fluent NHibernate创建聚簇索引?

我正在使用Fluent-NHibernate(使用自动化)来生成我的表,但是想要选择与默认使用的ID字段不同的聚簇索引.如何在默认主键字段以外的字段上使用Fluent NHibernate创建聚簇索引?

这背后的主要原因很简单.我正在使用Guids作为我的主键字段.默认情况下,NHibernate在主键字段上创建聚簇索引.由于Guids通常不是顺序的,因此主键字段上的群集会导致性能问题.

众所周知,在表格末尾附加记录比在表格中插入记录要便宜得多.此外,表中的记录按聚集索引中的项目顺序物理存储.由于Guids有点"随机"而且不是顺序的,因此可能会生成小Guid,这些Guid小于表中已有的其他Id Guids的值 - 导致表插入而不是追加.

为了最小化这个,我有一个名为CreatedOn的列,其类型为DateTime.我需要将表聚集在此CreatedOn列上,以便附加所有新记录而不是插入.

欢迎任何有关如何实现这一目标的想法!

注意:我意识到我可以使用顺序指南,但出于安全原因,我不想走这条路.


注意:我仍然没有这篇文章的答案,但我现在有一些想法,我正在思考.

  1. 使用NHibernate而不使用Fluent,我认为可以直接在NHibernate中创建聚簇索引.我还不太了解NHibernate知道如何做到这一点.我很漂亮(几乎绝对是)确定它可以完成.

  2. Fluent-NHibernate过去常常包含一种在最近重写之前在SQL对象上设置属性(例如像聚簇索引)的方法.现在这个选项似乎已经消失了.我可能会在某处发布一个问题,看看该选项是否仍然可用.如果是这样,我可能会使用它来设置聚集索引.

  3. Fluent-NHibernate能够在流畅构建后公开配置以进行手动编辑.我没有尝试过这个功能,但希望它可以提供设置聚簇索引所需的粒度级别.

  4. 在最糟糕的情况下,我可以编写一个SQL脚本来在生成所有表后更改聚簇索引.但是,我对这种方法有几个问题.答:由于我使用自动模式生成,NHibernate会在下次评估配置时"撤消"我的聚簇索引吗?2.如果检测到聚簇索引已更改,NHibernate会出错吗?我需要测试一下,但还没有这样做.我真的很讨厌这个解决方案.我正在测试我的数据库对SQLServer2008和MySQL.NHibernate的一部分优点是它与数据库无关.一旦我们介绍了脚本,所有的赌注都会被取消.

  5. 在一个名为IPropertyInstance Classes的流畅约定中使用了一个接口,该接口从此接口继承了一个Index属性,该属性允许在该字段上创建索引.问题是没有标志或其他选项允许将索引创建为群集.最简单的解决方案是向此方法添加属性以允许创建聚簇索引.我想我可以向Fluent-NHibernate开发人员提出建议.

nhibernate fluent-nhibernate automapping clustered-index

3
推荐指数
1
解决办法
2710
查看次数

Sysinternals的Portmon:错误2

当我尝试连接到本地端口,计算机 - >连接本地,使用Portmon v.3.02,我收到一个错误消息,错误2,在一个小错误对话框中:

在此输入图像描述

我以管理员身份运行该工具(如果没有,我收到错误6).

顺便说一下,这是一个Windows 7 x64.在32位,在Windows 7 x86中,它工作正常.我该如何解决这个问题?

serial-port

57
推荐指数
4
解决办法
5万
查看次数

C#:使用布尔返回类型创建多播委托

Hai Techies,

在C#中,我们如何定义接受DateTime对象并返回布尔值的多播委托.

谢谢

c# delegates

12
推荐指数
1
解决办法
1万
查看次数

ASP.net在localhost上调试https

我必须在我的asp.net应用程序上测试一个应该在https上工作的方法.有没有办法我可以在https上的localhost上运行应用程序,所以我可以调试它?

asp.net https

6
推荐指数
1
解决办法
4965
查看次数

关系数据库应用程序

在开发主要与数据库交互的应用程序时,有什么好的开始?该应用程序需要根据用户输入,排序和结构进行大量过滤.

c++ mysql database

2
推荐指数
1
解决办法
558
查看次数

用于数据库支持的集合的Java库

我正在寻找一个有效的sql支持的集合库,用于Java编程语言.

我需要做一些非常适合Collections API的数据库操作,有什么东西可以成为一个很好的桥梁,或者我必须自己动手.

java sql database collections orm

0
推荐指数
1
解决办法
309
查看次数