标签: domainservices

以编程方式确定当前域控制器

我需要查询当前的域控制器,可能是主要的更改用户密码.

(P)DC名称应该是完全合格的,即DC=pdc,DC=example,DC=com(如何正确命名这种表示法?)

如何使用C#完成?

.net c# active-directory domaincontroller domainservices

7
推荐指数
2
解决办法
2万
查看次数

将域服务注入DDD中的AggregateRoots

DDD中众所周知的建议是Aggregate Roots不使用域服务.域服务是协调两个聚合根以实现行为.

当我看到由Rinat Abdullin撰写的题为Building Blocks of CQRS的博客时,我真的很惊讶.在"域服务"部分下,您将读到域服务注入聚合根.

Aggregate Root可以接受域服务吗?

domain-driven-design domainservices

7
推荐指数
3
解决办法
2204
查看次数

域服务层的良好命名

抽象

哪个名字更好?

  • Domain.PersonService
  • DomainServices.PersonService
  • DomainServices.PersonDomainService(考虑一些较长的名字PersonDomainServiceModelDecorator)

或者是其他东西?

情况

我们有一个框架,每个层都有一些基类.防爆.存储库,域服务,UI等

每个逻辑层都有一个名称,用作其名称空间:

  • 包含存储库的数据层的"数据"; 防爆.Fx.Data.DbContextRepository
  • 域(非Web)服务层的"服务"; 防爆.Fx.Services.CrudService
  • Web UI层的"Web.UI"; 防爆.Fx.Web.UI.Controllers.CrudController

对于一些额外的层,我们也遵循相同的终端项目规则:

  • "数据"Ex. Project.Data.PersonRepository
  • "服务"Ex. Project.Services.PersonService
  • "Web.UI"Ex. Project.Web.UI.Controllers.PersonController
  • 代码优先实体的"实体"; 防爆.Entities.Person
  • 对象模型的"模型"; 防爆.Models.Person.Criteria,Models.Person.PersonDeleteModel

我的重点是"域名服务"层,但欢迎任何关于其他层的想法.

我们最终得出的结论是"服务"不是"域服务"的合适名称,因为它可能导致"Web服务"或"域服务"层之间的歧义.

现在我们将"服务"命名空间更改为"域"或"域服务".但我们还有另一个问题.我们为每个域服务类(例如PersonService)添加了"服务"后缀.现在,使用"DomainService"后缀(例如DomainServices.PersonDomainServer或者DomainServices.DomainPersonService)似乎很难看.

因此,使用"Domain"作为命名空间可能更漂亮,而类名称显示它们是域命名空间(Ex.Domain.PersonService)下的服务.

c# architecture naming domainservices

7
推荐指数
2
解决办法
2914
查看次数

WCF Ria Services ChangeSet.GetOriginal():它是如何工作的?

我有一个相当简单的问题,我似乎无法找到答案.我有一个带Ria Services的silverlight应用程序.在DomainService类中,我有一个更新方法,如下所示:

public void UpdateConversationState(ConversationState currentConversationState)
    {
        var original = ChangeSet.GetOriginal(currentConversationState);
        if (original != null)
            ObjectContext.ConversationStatesRepository.AttachAsModified(currentConversationState, original);
        else
            ObjectContext.ConversationStatesRepository.Attach(currentConversationState);
        currentConversationState.UpdDat = DateTime.Now;
        if(original.Name != currentConversationState.Name)
            //Do something extra
    }
Run Code Online (Sandbox Code Playgroud)

问题是Name属性始终为空.实际上除Id之外的每个字段都有默认值.我已经尝试过搜索GetOriginal方法如何工作,但找不到任何帮助.看起来它似乎试图根据从客户端发送回服务器的更改来重建服务器上的原始对象.

或者也许任何人都知道更好的方法来检查更新期间对象的某个属性是否已更改?我当然可以将它与数据库中的值进行比较,但似乎我应该避免对数据库的额外调用.

任何帮助再次非常感谢:-)

编辑:刚刚发现RoundTripOriginalAttribute.这似乎可以解决问题.我是唯一一个认为RIA可以记录得更好的方式吗?

changeset wcf-ria-services domainservices

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

MVC - 域服务负责过滤还是存储库层?

我应该从域服务过滤我的IQueryable结果吗?

例如......我的3个门户网站(网站)访问相同的域服务层,具体取决于用户的类型,我调用特定的存储库方法并返回结果,

当前存储库层:

    IQueryable<Products> GetAllProductsForCrazyUserNow(CrazyUser id);
    Products GetAProductForCrazyUserNow(CrazyUser id,product id);

    IQueryable<Products> GetProductsForNiceUserNow(NiceUser id);
    Products GetProductsForNiceUserNow(NiceUser id,product id);
Run Code Online (Sandbox Code Playgroud)

在存储库层中执行此操作是否最好:

    IQueryable<Products> GetAllProducts();
    Products GetAProduct(product id);
Run Code Online (Sandbox Code Playgroud)

然后在域服务中,我简单地做过滤器,即

var Niceman = IQueryable<Products> GetAllProducts().Where(u=> u.Name == "Nice");
Run Code Online (Sandbox Code Playgroud)

注意:我有一个只读会话和会话,其中包括存储库层中的CRUD,因此在回答时请记住这一点.

第二个问题:我应该在域服务层进行任何过滤吗?这个层是唯一可以修改实体的层,即Product.Price == 25.00; 这不是委托给存储库层.

c# model-view-controller asp.net-mvc repository domainservices

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

System.ServiceModel.DomainServices.EntityFramework DLL在哪里?

我正在尝试使用RIA服务,我安装了Silverlight 4和Silverlight 4 Tools/SDK,但我无法设置LINQToEntitiesDomainService,因为我找不到这个命名空间/程序集:System.ServiceModel.DomainServices.EntityFramework.这个集会来自哪里,不知道为什么它会丢失?这是一个我错过的附加组件吗?

谢谢.

.net silverlight wcf-ria-services domainservices

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

Silverlight安全上下文

我想知道Silverlight是否有一个安全上下文,您可以在其中标记部分代码[PrincipalPermission(SecurityAction.Demand, Role = "Administrator")].

从迄今为止我收集到的所有研究来看,为了获得"用户对象",你必须编写一个服务(或者使用他们希望使我们的生活复杂化的令人讨厌的RIA垃圾)并来回传递自定义用户对象(继承自UserBase对象),可由xaml(silverlight)运行时和wcf服务识别.

假设这是正确的,我如何限制访问silverlight应用程序中的特定屏幕?

如何将当前安全主体设置为与从服务返回的用户实例相同?

我不想重新发明轮子,我希望通过使用PrincipalPermission属性或silverlight等效装饰屏幕,我可以在Silverlight代码中的ASP.NET/Windows中使用授权技术.

任何帮助将不胜感激!谢谢,

马丁

security silverlight asp.net-membership silverlight-4.0 domainservices

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

“域名服务”是什么意思?

在研究WCF RIA服务时,我无法清楚地了解域服务。

谁能向我解释域服务的作用是什么?

dns service wcf ria domainservices

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

如何减少控制器和业务层服务中构造函数参数的数量?

这是这篇 SO 帖子的重新措辞。

我发现使用中介模式可以有效减少控制器中的参数数量。

然后我开始怀疑这是否是情感领域服务。

但这不会隐藏服务的依赖关系吗?

我记得在某处读到,如果我注入了一堆依赖项,我可能有一个更大的域概念,可以封装在它自己的服务中。我发现这是一种有效的模式。

那么,如何减少业务层服务中构造函数参数的数量呢?

c# architecture business-logic-layer mediator domainservices

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

DDD:需要获取数据作为其业务规则一部分的领域服务的问题

假设我有一个实现以下业务规则/策略的域服务:

\n
\n

如果“家庭”类目中所有产品的总价超过100万,则对超过一年的家庭产品降价50%。

\n
\n

使用基于集合的存储库

\n

我可以简单地创建一个域服务,使用规范模式加载“系列”类别中的所有产品,然后检查条件,如果为真,则降低价格。由于产品是由基于集合的存储库自动跟踪的,因此域服务不需要像应该那样发出任何显式的基础结构调用 \xe2\x80\x93 。

\n

使用基于持久性的存储库

\n

我运气不好。我可能会摆脱使用存储库和规范在我的域服务中加载产品的情况(像以前一样),但最终,我需要发出Save不属于域层的调用。

\n

我可以在应用程序层加载产品,然后将它们传递给域服务,最后再次将它们保存在应用程序层,如下所示:

\n
// Somewhere in the application layer:\npublic void ApplyProductPriceReductionPolicy()\n{\n  // make sure everything is in one transaction\n  using (var uow = this.unitOfWorkProvider.Provide())\n  {\n    // fetching\n    var spec = new FamilyProductsSpecification();\n    var familyProducts = this.productRepository.findBySpecification(spec);\n\n    // business logic (domain service call)\n    this.familyPriceReductionPolicy.Apply(familyProducts);\n\n    // persisting\n    foreach (var familyProduct in familyProducts)\n    {\n      this.productRepository.Save(familyProduct);\n    }\n\n    uow.Complete();\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

但是,我发现这段代码存在以下问题:

\n
    \n
  • 加载正确的产品现在是应用程序层的一部分,因此,如果我需要在其他用例中再次应用相同的策略,我需要重复一遍。
  • \n
  • 规范 …

domain-driven-design repository-design domainservices

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

如果域事件失败怎么办?

我是DDD的新手.现在我正在看域名活动.我不确定我是否正确理解了这个域事件,但我只想到如果域事件发布失败会发生什么?

我这里有个案子.当买家从我的网站订购商品时,首先我们将创建一个对象,订单包含一系列商品.将发布域事件OrderWasMade以扣除库存中的库存.所以在这种情况下,如果在处理事件时,项目数量将被扣除,但是如果系统试图扣除库存,则发现该项目没有剩余库存(金额= 0) .因此,物品金额不能扣除,但订单已经提交.

这种情况会发生吗?

很抱歉在这里有其他2个问题.

  1. 似乎每个事件都在自己的事务范围内,这意味着系统需要立即打开多个数据库连接.所以,如果我使用IIS服务器,我必须启用DTC,我是否正确?

  2. 域事件和域服务之间是否存在任何关系?

domain-driven-design distributed-transactions domainservices domain-events

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