DAO、Service、Controller层单例设计、有状态、无状态、开饭馆、群演拍戏举例
1718 2022-05-25 11:18
开饭馆最重要的是什么?吃饭。除了饭菜质量之外,最重要的是什么?管理。除了技术,我们今天聊一些比别的。比如,管理的技术(滚犊子)。一套运营机制是一个企业的核心。乔布斯想创造的就不是一个产品,而是一套企业文化和企业制度。能够传承下去的运营体系。 那么,运营的目的是什么,绝不是一个顾客的好评,而是一堆顾客甚至谁来谁说好。那么重点在于某个服务员的耐心点菜吗?重点在于免费赠送的茶水零食吗?重点在于等候期间有小姐姐给你讲故事安慰你吗?显然不是。重点在于上菜快、有锅气、环境优美、大气整洁。大气没办法,小店也能营造出别样温馨。我们主要讲重中之重。那就是一堆食客,与一堆食材的关系。这里面谁最重要?三种人:厨师、派单系统、前台小姐姐。显然,要完成把油放入锅里,把食物放入油里这么复杂的制作过程。让顾客吃的及时,吃的痛快,给个好评赶紧滚蛋。不耽误下一位顾客交钱。才是最重要的。那么关键过程按比例,肯定不是前台小姐姐接收点菜、肯定不是传菜系统如何分配厨师和上菜、那么两头的制作和使用就是最关键的供需关系。而中间控制节奏、协调配额的传菜系统和前台小姐姐,就分别对应着service层和controller层。并且今年春天我去吃炸鸡的时候,1号分店竟然没鸡了,去别的分店取来的成品,分装给我。也就是说service层还应该可以是无状态的设计。这样就可以支持微服务以及RPC。因此,为了节约垃圾回收的成本,service层和controller层都采用单例设计。当然,为了避免数据库稀缺资源的多方调用,连接以及操作也都采用单例设计。但是重点来了。DAO层和model层,能分清吗?一个是MVC框架,一个是Spring、JPA框架,看似不搭噶。实际上有关联。没错。model层不用单例,但是dao层的配置使用单例。model就是厨师呀,model就是灶呀,model就是可以跑去分店进货的外援呀。不说多多益善,至少也是来者不拒。他们直接调用单例对数据库操作不就完了。没人用他们会自己被回收的。单例是三班倒,完成一项短平快工作的,model则是不知道多烂一坨需求扔进来拆,也不知道多久能干完。有人点炸薯条一份,有人点东坡肘子,你看哪个厨师能跑100米和马拉松都拿第一的?所以不管点什么菜,前台小姐姐都能笑得出来,就用单例,后面大厨做完东坡肘子,你得让他歇会儿,那就别用单例。关于service层有状态的同步/异步+阻塞/非阻塞。请看以前拉粑粑等茅坑的文章。
其实拍影视剧的终端更适合举例。因为大量的演员都是群众演员。群众演员每天招来的都不一样。所做的工作也不固定。除了主角需要固定。常用的演员需要保持之外,其他的群众演员,每天招来分配一场任务,等他们执行结束自动解散即可。所以对于群演,他们需要做很多杂活、一次性的工作。这正是数据库model只要用到就生成一个对象的原因。他们每次保存的正是每一次发帖、每一次回复、每一次点赞。这些对象都是一次性并且各不相同的。量大并且没有必要留存。而那些建立的连接、计数的人,才需要固定好三班倒来维持唯一的通道。
全部评论