在Event Sourcing模式中,您是否有两个不同的类来读取和写入事件?
In the Event Sourcing pattern, do you have two different classes for reading and writing events?
是否应该将存储事件流中的与读取事件流中的分开实现?
例如,下面的抽象基类提供了一种持久化事件的方法,以便以后可以重播这些事件。
class event_store_t {
public:
virtual void store(const event_t& event) = 0;
virtual ~event_store_t() {}
};
用于测试的具体派生类的接口如下:
class ostream_event_store_t : public event_store_t {
public:
virtual void store(const event_t& event);
};
现在,当在以后的时间点重播事件时,是否应该有一个单独的类来读取事件?例如,抽象基类显示为:
class event_stream_t {
public:
virtual boost::shared_ptr<event_t> read() = 0;
};
和具体的派生类显示为:
class istream_event_stream_t : public event_stream_t {
public:
istream_event_stream_t(std::istream& input) : input_(input) {}
virtual boost::shared_ptr<event_t> read() {
// Read the event.
}
};
事件流中的事件存储应该与事件流中的事件读取分开实现吗?
可能不是吗?
将你的load实现与store实现分开的主要动机是这样你就可以独立地交换实现。
如果这还没有发生在你身上,那么你是在预先加载成本到你的设计中,假设现在分离成本将比以后更有效,记住,在这个假设的"以后",你将比现在更了解变化的需求。
这似乎不是个好主意。
也就是说,您可能已经注意到需要读功能的消费者并不总是需要写功能,反之亦然。因此,有一个读接口与写接口分开,用一个模块实现这两个接口是有意义的。
相关文章:
- 如何从文件中读取两个字符串和数字数组,并将它们存储在对象向量中
- 如何读取单个字符并在输入两个字符序列时输出? 使用 while 循环和C++
- 如何将字符串和整数读取到两个单独的动态数组中的程序编写?
- 在 c++ 中从文本文件中读取两个十六进制值
- 使用 C++ 读取具有两个连续分隔符的 csv 文件
- C++添加检查以避免读取两个参数
- 有没有办法我可以从 istringstream 中读取两个字符
- 两个'rare'矩阵的总和,读取为坐标 X、坐标 Y 和一个值
- C 读取/写入两个不同的文件(需要帮助了解要使用的语法)
- 使用两个不同的管道C 读取和写入相同的过程
- 无法使用OpenCV打开两个摄像头-多线程摄像头读取
- c++读取txt文件并复制到两个类istream::peek()中
- 在C 中进行文件处理以读取两个整数
- C 程序要读取包含两个双重值的Excel数据的单列,这些值由逗号分隔并存储在自己的数组中
- C++,构造一个读取两个实数和一个字符的程序
- 使用 Stringstream 和 getline 读取每行的前两个数字
- 一次读取两个字节的.dat文件
- 在C 中读取CSV文件中的两个列
- 从文件中读取两个向量
- 将两个字符串作为一个字符串读取