Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在…上 child.parent_id=d.id 和start_date_time GETDATE()) ) 挑选* 根据数据;_Java_C#_Domain Driven Design_Cqrs_Event Sourcing - Fatal编程技术网

Java 在…上 child.parent_id=d.id 和start_date_time GETDATE()) ) 挑选* 根据数据;

Java 在…上 child.parent_id=d.id 和start_date_time GETDATE()) ) 挑选* 根据数据;,java,c#,domain-driven-design,cqrs,event-sourcing,Java,C#,Domain Driven Design,Cqrs,Event Sourcing,您现在是如何构建结构的?为什么你不能得到一些初始状态和汇总更改?我没有。我在这个项目的早期阶段。只是想了解一些信息。初始状态?是的,但我需要获取根节点汇总事件的初始状态,获取相关节点的信息,并对它们执行相同的操作。而且递归到底,这将花费很多时间。特别适用于1k节点。我不知道也许我的模型错了?如果你这么认为,告诉我。你会参加什么类型的活动?某些类型的事件是否可以与多个节点相关?您还可以有许多初始状态,节点和叶的初始状态将始终相同。我称之为叶子只是为了显示可以有多个人的节点。对于真正的叶,它只是具有

您现在是如何构建结构的?为什么你不能得到一些初始状态和汇总更改?我没有。我在这个项目的早期阶段。只是想了解一些信息。初始状态?是的,但我需要获取根节点汇总事件的初始状态,获取相关节点的信息,并对它们执行相同的操作。而且递归到底,这将花费很多时间。特别适用于1k节点。我不知道也许我的模型错了?如果你这么认为,告诉我。你会参加什么类型的活动?某些类型的事件是否可以与多个节点相关?您还可以有许多初始状态,节点和叶的初始状态将始终相同。我称之为叶子只是为了显示可以有多个人的节点。对于真正的叶,它只是具有特定
类型
属性的节点。节点中存在的事件有:NodeHasBeenCreated、PersonHasBeenHired(仅当type=='leaf')、nodepositionhasbeendeletted、nodehasbeendeletted、nodetypehaswered。我更新了一点描述。您现在如何构建结构?为什么你不能得到一些初始状态和汇总更改?我没有。我在这个项目的早期阶段。只是想了解一些信息。初始状态?是的,但我需要获取根节点汇总事件的初始状态,获取相关节点的信息,并对它们执行相同的操作。而且递归到底,这将花费很多时间。特别适用于1k节点。我不知道也许我的模型错了?如果你这么认为,告诉我。你会参加什么类型的活动?某些类型的事件是否可以与多个节点相关?您还可以有许多初始状态,节点和叶的初始状态将始终相同。我称之为叶子只是为了显示可以有多个人的节点。对于真正的叶,它只是具有特定
类型
属性的节点。节点中存在的事件有:NodeHasBeenCreated、PersonHasBeenHired(仅当type=='leaf')、nodepositionhaswanged、nodehasbeendelete、nodetypehaswanged。我更新了一点描述。我印象深刻,这很简单。:)但我没有什么顾虑:我将持有大量额外的数据,这些数据可能永远不会在读取模型中使用。我还需要以这样的分辨率存储事件吗?因为我所有的历史数据都在读取模型中。我可以在消息队列上推送事件,而不将它们存储在事件存储中。我主要使用Postgres,它具有JSON列类型。所以我想创建这样的时态表会更有效:创建表树(id int NOT NULL,parent_id int NULL,data JSON NOT NULL,start_date_time datetime NOT NULL,end_date_time datetime NULL);数据列将保存任何额外的信息,如:名称、类型等。它将帮助我为每条记录节省几个字节。那怎么办?读取模型应该是可丢弃的。存储的事件是真相的唯一来源,所有内容都必须存储在写端(事件存储)。您可以按照您想要的方式对read模型进行建模,但它应该针对查询进行优化。如果需要完成各种查询,您可以对同一数据进行多个表示。我印象深刻,这非常简单。:)但我没有什么顾虑:我将持有大量额外的数据,这些数据可能永远不会在读取模型中使用。我还需要以这样的分辨率存储事件吗?因为我所有的历史数据都在读取模型中。我可以在消息队列上推送事件,而不将它们存储在事件存储中。我主要使用Postgres,它具有JSON列类型。所以我想创建这样的时态表会更有效:创建表树(id int NOT NULL,parent_id int NULL,data JSON NOT NULL,start_date_time datetime NOT NULL,end_date_time datetime NULL);数据列将保存任何额外的信息,如:名称、类型等。它将帮助我为每条记录节省几个字节。那怎么办?读取模型应该是可丢弃的。存储的事件是真相的唯一来源,所有内容都必须存储在写端(事件存储)。您可以按照您想要的方式对read模型进行建模,但它应该针对查询进行优化。如果需要完成各种查询,可以对同一数据进行多个表示。
Node 
 - Node 
   - Node (with propety type === leaf)
     + Person
     + Person
 - Node
 - Node
Node
  {
      private string name;
      private string parentNodeID;
      private string type;
      private Array  hiredPersons;  

      Node(string name, string parentNodeID, string type) {
          this.apply(new NodeHasCreated(name, parentNodeID, type));
      }

      public void hirePerson(Person person)
      {
          if(this.type === 'leaf') {
              this.apply(new PersonHasBeenHired(person.id));
          }
      }          

  }
Node (id , type, parent_id)
Then where you usually:

did an INSERT you: 
    INSERT INTO tbl (..., start_date) VALUES (..., currentDate)

did an UPDATE you:
    UPDATE tbl SET end_date = GETDATE() WHERE [update predicate] AND end_date IS NULL
    INSERT INTO tbl (..., start_date) VALUES (..., currentDate)
did a DELETE you:
    UPDATE tbl SET end_date = GETDATE() WHERE [delete predicate] AND end_date IS NULL
SELECT *
FROM tbl
WHERE start_date <= someDate AND (end_date IS NULL OR end_date > someDate)
CREATE TABLE Tree (
    id int NOT NULL,
    parent_id int NULL,
    name nvarchar(50) NOT NULL,
    start_date_time datetime NOT NULL,
    end_date_time datetime NULL
);

GO

CREATE UNIQUE NONCLUSTERED INDEX UN_Tree_id_end_date_time
ON Tree (id, end_date_time)
WHERE end_date_time IS NULL;

INSERT INTO Tree (
    id,
    parent_id,
    name,
    start_date_time,
    end_date_time
)
VALUES
    (1, NULL, 'A', GETDATE(), NULL), -- node A created
    (2, NULL, 'B', GETDATE(), NULL), -- node B created
    (3, 1, 'A.1', GETDATE(), NULL), -- node A.1 created
    (4, 2, 'A.1.1', GETDATE(), NULL); -- node A.1.1 added

-- Node A.1 renamed
UPDATE Tree
SET end_date_time = GETDATE()
WHERE id = 3 AND end_date_time IS NULL;

INSERT INTO Tree VALUES (3, 1, 'A.1_renamed', GETDATE(), NULL);

-- Node A.1.1 removed a day after
UPDATE Tree
SET end_date_time = DATEADD(d, 1, GETDATE())
WHERE id = 4 AND end_date_time IS NULL;


-- Query nodes from root A as of now using a recursive CTE
-- Note: Did not manage to declare a @asOf variable variable in SQL Fiddle
WITH data AS (
    SELECT id, parent_id, name
    FROM Tree
    WHERE 
        id = 1
        AND start_date_time <= GETDATE() 
        AND (end_date_time IS NULL OR end_date_time > GETDATE())

    UNION ALL

    SELECT child.id, child.parent_id, child.name
    FROM data d
    INNER JOIN Tree child
        ON 
            child.parent_id = d.id
            AND start_date_time <= GETDATE() 
            AND (end_date_time IS NULL OR end_date_time > GETDATE())
)   
SELECT *
FROM data;