-
Notifications
You must be signed in to change notification settings - Fork 246
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
对Model抽象的疑惑(Publisher、UnPublisher、Subscriber、Watcher) #287
Comments
最早是V5的时候,有watcher、publisher和subscriber等概念,作为几种不同类型的客户端,存储在不同的“Store”里面,这么设计也是最初V5使用了多个线程池,通过task对象进行解耦,所以,将元信息封装在“model”对象中。 而V6我们改版时候,经过压测等手段,发现异步解耦有如下问题:
后来,针对异步队列进行了解耦,但是留下了原有的对象,存储。 再后来,对象本身好像被加了一些定义,这个 @bjxiaojian 比较清楚 |
|
|
如果这个对象是common.model.store下的,我建议是不要带有”业务逻辑“。 结合一下DataStore#add方法,Publisher、UnPublisher、Subscriber、Watcher都是能被add到DataStore里面的,以及他们实现了Serializable接口,所以他们应该是数据模型。就像你要像DB插入一行数据,你插入的肯定是数据,而不是数据结构。 |
性能的坑具体只什么:这个就是一些很直接的调用,改为要先入队到线程池里面,然后,由线程池执行任务时,触发消费方的执行。无形地让一个纯内存的操作,变成了上下文切换 + 阻塞队列 的操作。性能损耗就在这里。 线程池解耦比较适合一些重IO操作的异步化,内存操作还是同步比较好,放线程池不但不解决问题,还会导致性能损耗。 背景就是这么的。 |
嗯 理解,不过这个应该跟这里的模型抽象没有太多的关系。模型并不会一定要绑定在异步的模式上。 |
Publisher、UnPublisher、Subscriber、Watcher,其中UnPublisher甚至不是一个名词 |
Publisher、UnPublisher、Subscriber、Watcher 这几个是data和session上存储的具体业务对象,UnPublisher 是 UnRegister这个动作生产的一个对象。 |
Your question
Publisher、UnPublisher、Subscriber、Watcher这四个类的定义都在model..common.model.store中,所以他们都是存储相关的模型吗?但是他们中又带有业务逻辑,比如:

如果他们是业务模型,但它们似乎又都用户数据传输相关的操作。
另外UnPublisher作为一个模型对象本身是不合适的吧?
Your scenes
存储模型(类DTO对象不应当包好业务逻辑),业务模型应当和存储模型进行分离
Your advice
对存储模型、业务模型做好清晰的抽象
Environment
java -version
):uname -a
):The text was updated successfully, but these errors were encountered: