小编Chr*_*ris的帖子

域驱动设计:域服务,应用服务

有人可以通过提供一些示例来解释域和应用程序服务之间的区别吗?并且,如果服务是域服务,我是否会将此服务的实际实现放在域程序集中?如果是,我是否也会将存储库注入该域服务?一些信息会非常有用.

architecture domain-driven-design

243
推荐指数
8
解决办法
6万
查看次数

SQL - 为每条记录调用存储过程

我正在寻找一种方法来为select语句的每个记录调用存储过程.

SELECT @SomeIds = (
    SELECT spro.Id 
    FROM SomeTable as spro
    INNER JOIN [Address] addr ON addr.Id = spro.Id 
    INNER JOIN City cty ON cty.CityId = addr.CityId
    WHERE cty.CityId = @CityId
)


WHILE @SomeIds  IS NOT NULL
BEGIN
    EXEC UpdateComputedFullText @SomeIds
END
Run Code Online (Sandbox Code Playgroud)

上面这样的事情当然不起作用,但有没有办法做这样的事情?

sql t-sql sql-server

46
推荐指数
4
解决办法
8万
查看次数

域驱动设计:如何访问聚合根的子节点

如果我有一个Order类作为聚合根和1000个行项.

如何只加载1000个订单项中的一个?据我所知,订单项只能通过Order类访问,并具有"本地"标识.我还会在OrderRepository中创建一个像"GetLineItemById"的存储库方法吗?

编辑评论答案: 目前我不认为有一个不可变的孩子是合理的.如果我的Customer类包含多个地址,合同以及更多子集合,该怎么办?我想要执行CRUD方法的庞大实体.

我会

public class Customer
{
    public IEnumerable<Address> Addresses { get; private set; }
    public IEnumerable<Contracts> Contracts { get; private set; }
    ...
}
Run Code Online (Sandbox Code Playgroud)

如果用户纠正地址或合同财产的街道,我是否必须这样做?

public class Customer
{
    public void SetStreetOfAddress(Address address, street){}

    public void SetStreetNumberOfAddress(Address address, streetNumber){}
}
Run Code Online (Sandbox Code Playgroud)

然后,客户类将充满子操作方法.所以我宁愿这样做

addressInstance.Street = "someStreet";
Run Code Online (Sandbox Code Playgroud)

我想我误解了整个概念.. :)

.net nhibernate design-patterns domain-driven-design repository

25
推荐指数
2
解决办法
7894
查看次数

DDD:枚举像实体一样

我有以下数据库模型:

**Person table**
ID    |    Name    | StateId
------------------------------
1          Joe       1
2          Peter     1
3          John      2

**State table**
ID    |    Desc
------------------------------
1          Working
2          Vacation
Run Code Online (Sandbox Code Playgroud)

和域模型将(简化):

public class Person
{
    public int Id { get; }
    public string Name { get; set; }
    public State State { get; set; }
}

public class State
{
    private int id;
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

状态可能在域逻辑中使用,例如:

if(person.State == State.Working)
    // some logic
Run Code Online (Sandbox Code Playgroud)

因此,根据我的理解,State就像一个用于域逻辑检查的值对象.但它也需要存在于DB模型中以表示干净的ERM.

所以州可以扩展到:

public class …
Run Code Online (Sandbox Code Playgroud)

.net c# design-patterns domain-driven-design

12
推荐指数
2
解决办法
6465
查看次数

Asp.net HttpModule在目录级web.config中

我创建了一个自定义的http模块,并希望将此模块添加到Web配置中.Web应用程序是一个包含多个"子应用程序"的项目.子应用程序只是一个文件夹,在该文件夹中它有自己的web.config.我这样做是因为每个应用程序都有自己的应用程序相关内容,样式表,配置等.

现在我创建了一个自定义的http模块.将此添加到根web.config时,模块正常工作.将http模块配置添加到目录级web.config(例如/Applications/MyApplication/web.config)时,模块不再被初始化.即使msdn声明HttpModules配置元素也在目录级别工作.谁知道如何解决这个问题?

.net asp.net

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

Delphi SOAP Envelope和WCF

我正在开发一个提供soap接口的系统.其中一个将要使用该接口的系统在Delphi 7中编码.Web服务是使用WCF,基本的http绑定,SOAP 1.1开发的.

如果我使用SOAP UI(JAVA),该服务正常工作.但德尔福似乎在这里做了特别的事情;)

这是SOAP UI中消息的样子:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://services.xxx.de/xxx">
   <soapenv:Header/>
   <soapenv:Body>
      <ser:GetCustomer>
         <!--Optional:-->
         <ser:GetCustomerRequest> <!-- this is a data contract -->
            <ser:Id>?</ser:Id>
         </ser:GetCustomerRequest>
      </ser:GetCustomer>
   </soapenv:Body>
</soapenv:Envelope>
Run Code Online (Sandbox Code Playgroud)

我不是delphi开发人员,但我开发了一个简单的测试客户端,看看出了什么问题.这就是Delphi作为SOAP信封发送的内容.

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
  <SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:NS2="http://services.xxx.de/xxx">
    <NS1:GetCustomer xmlns:NS1="http://services.xxx.de/xxx">
      <GetCustomerRequest href="#1"/>
    </NS1:GetCustomer>
    <NS2:GetCustomerRequest id="1" xsi:type="NS2:GetCustomerRequest">
      <Id xsi:type="xsd:int">253</Id>
    </NS2:GetCustomerRequest>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Run Code Online (Sandbox Code Playgroud)

WCF抛出一个德语错误...;)

Es wurde das Endelement"Body"aus命名空间" http://schemas.xmlsoap.org/soap/envelope/"erwartet.Gefunden wurde"Element"NS2:GetCustomerRequest"aus Namespace" http://services.xxx.de/xxx "".Zeile 1,职位599.

意味着什么

身体是预期的.但是找到了元素"NS2:GetCustomerReques".

现在我的问题是:我可以以某种方式改变Delphi创建信封的方式吗?或者是使WCF使用这种消息格式的方法?任何帮助是极大的赞赏!

.net c# delphi wcf soap

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

DDD - 实体状态转换

考虑以下简化示例:

public class Ticket
{
   public int Id;
   public TicketState State;

   public Ticket()
   {
      // from where do I get the "New" state entity here? with its id and name
      State = State.New;
   }

   public void Finished()
   {
      // from where do I get the "Finished" state entity here? with its id and name          
      State = State.Finished;
   }
}

public class TicketState
{
   public int Id;
   public string Name;
}
Run Code Online (Sandbox Code Playgroud)

类状态直接在域对象票证中使用.在故障单生命周期的后期可能会设置其他状态.

故障单将持久保存到故障单表以及TicketState中.因此,在数据库中,票证将具有票证状态表的外键.

在我的实体中设置适当的状态时,如何从数据库加载状态实例?我是否必须将存储库注入实体?在这种情况下,我是否需要使用像城堡这样的框架?或者有更好的解决方案,可能从外面传递状态?

public class Ticket
{
   //...
   public ITicketStateRepository …
Run Code Online (Sandbox Code Playgroud)

.net c# java design-patterns domain-driven-design

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

主数据管理 - 数据冗余

我目前正在开发一个系统,它可以保存所有相关的主数据,例如客户,或者有关我们系统环境中存在的操作系统的信息.为这些实体分配的ID在企业中是唯一的.当某些系统存储例如客户相关数据时,它也必须保存客户的主数据ID.主数据系统基于.Net和MSSQL 2005.

  1. 现在我的问题是,当使用自己的程序集,数据库等开发另一个使用MDM系统数据的系统时,你会将这些数据冗余地存储在其他系统数据库中,创建自己的业务实体(如客户)和硬盘从其他数据库(或ETL)的MDM中编码所需的主数据?这样,另一个系统与MDM分离,但仅存储全局主数据ID.

  2. 或者您是否将MDM的程序集集成到其他系统(如果是.Net)并使用MDM的数据层来加载全局实体(如客户)?

  3. 或者您是否让其他系统创建自己的实体,但是为了检索主数据,您将使用MDM提供的SOAP接口.

我倾向于使用no方法.1因为我认为最好从MDM解决方案中分离其他系统(关注点分离).由于MDM解决方案可以保存客户实体的更多数据,而不是在需要客户名称的其他系统中所需的数据.选项3是可能的,但Web服务可能会减慢操作系统的速度.你怎么看?

.net c# java architecture

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

域驱动设计 - 父子关系模式 - 规范模式

我想知道在处理父母子女关系时,以下哪项被认为是最佳做法.

1)以下示例似乎是一种常见做法,但在创建子实例时,只要未添加到父级,它就处于无效状态.这不会导致验证等问题.

public class Parent
{
    private ICollection<Child> children;

    public ReadOnlyCollection Children { get; }

    public void AddChild(Child child)
    {
        child.Parent = this;
        children.Add(child);
    }
}


public class Child
{
    internal Parent Parent
    {
        get;
        set;
    }

    public Child()
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

2)下一个样本将注意孩子必须始终与其父母相关.

public class Parent
{
    private ICollection<Child> children;

    public ReadOnlyCollection Children { get; }

    public Child CreateChild()
    {
        var child = new Child();
        child.Parent = this;
        children.Add(child);
        return child;
    }
}


public class Child
{
    internal Parent Parent …
Run Code Online (Sandbox Code Playgroud)

.net c# java domain-driven-design

6
推荐指数
2
解决办法
3369
查看次数

规范模式实现帮助

我有一个关于通过规范模式实施业务规则的问题.请考虑以下示例:

public class Parent
{
    private ICollection<Child> children;

    public ReadOnlyCollection Children { get; }

    public void AddChild(Child child)
    {
        child.Parent = this;
        children.Add(child);
    }
}


public class Child
{
    internal Parent Parent
    {
        get;
        set;
    }

    public DateTime ValidFrom;
    public DateTime ValidTo;

    public Child()
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

业务规则应该强制在集合中不存在有效期与另一个相交的子节点.

为此,我想实现一个规范,如果添加了一个无效的子节点,则该规范用于抛出异常,并且在添加子节点之前也可以用于检查规则是否会被违反.

喜欢:


public class ChildValiditySpecification
{
    bool IsSatisfiedBy(Child child)
    {
        return child.Parent.Children.Where(<validityIntersectsCondition here>).Count > 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

但在此示例中,子进程访问父进程.而对我来说似乎并不正确.当孩子尚未添加到父母时,该父母可能不存在.你会如何实现它?

.net c# java oop domain-driven-design

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