这辈子最有先见之明的一个设计

有一个通用的action(struts2做的),用来给用户加载菜单树。

菜单树嘛,更新少,读取多。于是就在内存里写了一个缓存。

可是更新少不代表不更新。真的更新了数据库,要怎么样通知到内存呢?

当时我在action里写了一个refresh()方法,用来刷新缓存。

没想到居然用上了,而且已经用了两次了=。=

在我做过的“为未来做的设计”里,这是最有先见之明的一次了。哈哈。

时间: 2024-10-25 01:35:21

这辈子最有先见之明的一个设计的相关文章

记录一个设计的问题

需求如下,现有一个类A以及子类B,C,D abstract class A{ abstract void fn(); } class B:A{ override void fn(){} } class C:A{ override void fn(){} } class D:A{ override void fn(){} } 显然,B,C,D需要各自重写相应的 fn() 来完成自己的功能.但是B,C,D由于功能相似,其fn()实现几乎相同.这个公共的函数有三种写法: 1. 在 A 里添加一个 pr

【译文】一个设计精良的领域驱动模型的五个特征

查看原文 我在这篇博客文章中,我试图给领域模型下一个非常合适的定义,我发现我的这些定义都不太妥当,不过,我们还是可以先来看一下wiki百科对领域驱动模型下的定义: 问题解决和软件工程中的领域模型可以被认为是感兴趣的领域(通常称为问题领域)的概念模型,其描述了各种实体,它们的属性和关系,以及控制完整性的约束.包含该问题域的模型元素. 听起来很重要?换句话说,领域模型是每个应用程序的重要组成部分,它是现实世界概念的表示.但是,如何区分好的领域模型和坏的模型呢?由于了解领域模型,你也需要了解问题域,因

C# WPF 一个设计界面

微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. C# WPF 一个设计界面 今天正月初三,大家在家呆着挺好,不要忘了自我充电. 武汉人民加油,今早又有噩耗,24号(8号)一路走好. 阅读导航 本文背景 代码实现 本文参考 源码 1. 本文背景 一个不错的界面设计 2. 代码实现 使用 .NET Framework 4.8 创建名为 "Dashboard1" 的WPF模板项目,添加3个Nuget库:MaterialDesignTh

BadVPN详解之--题外话:我之前自研的一个设计

说实话,这个与BadVPN无关,是我去年年初时想的一个东西,只是觉得与BadVPN类似就单列一篇文章来说,在看到BadVPN之前,我一直都想用这个思路来重构OpenVPN,无奈场面过于宏大,加之工作又再也与VPN无关,就一直搁置了,现在知道了有BadVPN这个东西,我也就再也没有必要去想这个事了,就当是个了结吧.我把我去年自研的基于OpenVPN的重构思路在本文中阐述一下,本文中我把我的这个VPN叫做ZyVPN,其实它是基于OpenVPN改的. 总览 有了前面对BadVPN和OpenVPN的介绍

关于项目模块间交互的一个设计思路

1.背景 某API项目,项目天然地按业务分为了不同的包,那么每个包都独立处理自己的业务逻辑,独立接管数据源,独立地向外部提供数据,彼此基本互不通信. 不过,随着需求的增多和业务的堆积,项目的复杂度越来越大,但是每个独立模块却又不足以独立出去成为一个单独的项目,而模块间又因业务需要开始发生交互的时候,问题来了. 2.问题描述 由于模块间的数据交互,按照Spring的套路,是可以直接把容器接管的对象注入到你需要的地方去的,那么一旦你开始问其他模块要数据,开始要命了.如上图,如果模块3问模块2和模块4

R-EACTR:一个设计现实网络战演习的框架

本材料来源于国防部资助并由卡内基梅隆大学软件工程研究所的运营的项目,合同编号为FA8721-05-C-0003,该项目是一家联邦资助的研究与开发中心. 本材料中所表达的任何意见.调查结果和结论或建议均为委托人的意见,调查结果和结论或建议,并不一定反映美国国防部的观点. 无担保.卡内基梅隆大学和软件工程学院的材料是"按原样"提供的.卡内基梅隆大学不作任何明示或暗示的保证,包括但不限于对适用性或适销性.专有性或使用本材料所产生的结果的担保.卡内基梅隆大学也不会对任何由此所产生的关于专利.商

一个设计项调用另一个设计项的(列表界面支持多选)

//详细说明 例如:[方案管理]设计项上有一个[检查]按钮,点击检查按钮时,调出[用户管理]设计项的列表界面 ,选中调出的[用户管理]设计项列表上的多条记录, 关闭[用户管理]列表时,将选中的记录中的username赋值给[方案管理]设计项所对应的实体中的JianChaRenYuan字段中. 前端sencha.cmd[方案管理]设计项列表上[检查]按钮中的js代码 1 function(button, record, e) 2 { 3 debugger; // 中断调试指令,可以手动删除它 4

一个设计 - 注册界面(一)

这里用的是MySQL+PHP基友组合 首先,我们需要创建一个数据库,并且创建user(id,name,pw)方便起见,我们将id设置为主键(默认)+自动增长 这里使用mysqli_connect,注意和mysql区别一下,确定连接成功之后,我们判断输入密码是否一致 $link = mysqli_connect('localhost', 'root', '你的数据库密码', '数据库名字'); 1 <?php 2 $link = mysqli_connect('localhost', 'root'

简单了解Flux,注意这是一个设计思想,是一个架构!!!!!

在RN开发中,我们总是需要去更改一个组件个数据(也就是所谓的状态),我们一般是采用是在初始化的函数constror()(好像拼错了) 在这个函数里面申明我们的初始化数据(状态)eg:this.state={xxxxx}, 而后,当我们需要去改变这个数据的时候,我们就要利用函数setState(),来改变数据! 这样来的话,数据改变了,那么,组件的View也就改变了! ,这个显然是虽基本的状态改变方法,但是,当我们的组件越来越多的话, 那么改变的状态就要写很多很多的类似的程序, 很不容易维护,从而