循证架构--寻找最适合自己的架构

简介:

没有最好的架构,只有最合适的架构。循证架构是《Expert One-on-One J2EE Development without EJB》一书中推崇的架构思路,用俺们的话说就是摸着石头过河,找最适合自己的架构。

俺现在soho,大活不多,小活不断。我的工作具备以下特点:

(1) 根本没摸清楚需求的时间。需求都是从原型到Demo到版本1到版本2探索出来的。经常需求变化非常大,因此,必须以敏捷方法为基础;

(2) 一般没多少数据需要存储,顶多百万级;

(3) 需要极度的压榨开发效率。一个工作,10天完成和20天完成,那收益前者就是后者的两倍。

在上面(1)-(3)驱动下,俺摸索出的架构见下图:

myarch

从下往上,简单说说:

(1) 数据库:db4o。谁用谁知道,哈哈,爽。什么ORM,SQL,DataSet,统统是过眼云烟了。一切都是普通对象。数据库几乎是0设计。数据接入也非常非常的简单。

(2) Db4o之上得有一个逻辑层,来应付需求变化。这一层主要就是各种实体对象,需要良好的设计,否则,应付不了需求的变化。这一块我一般要设计比较完备的event体系,便于后期修改与组合。

(3) 服务层:主要是RIA应用需要。如果是Winform程序,不用这一层。

(4) UI逻辑层:最开始没弄这一层,最后鉴于在界面那一块太耗时间,就加了这么一层。这一层主要是:

a) 对于单个控件,将控件的常用操作逻辑封装成扩展方法;

例子: Winform程序中的Invoke方法使用起来很烦人,涉及到多个线程,还要判断多次 IsHandleCreated == true(经常忘记,导致bug)。于是,需要将它封装成扩展方法。

代码如下:

Code

 

b) 对于多个控件,使用Mediator模式,将多个控件之间的组合抽象出Mediator类,方便重用。这一点我最开始是用户控件方式进行封装,结果发现太不灵活,最后改用Mediator,再配合扩展方法,开发速度biubiubiu的就上去了。

(5) UI:Html是万恶之源,能不用就不用。可以选择的话,我主要用Winform, Flex,SL作为前端。纯Web开发是不碰了(市面上做Web开发的太多,不趟这个混水了)。

以上架构,视项目而定。如果项目的数据部分比较关键,我现在还是保守的在用关系数据库。虽然db4o已经那么多年了,还是得保守一点用。

如果能完全按上面五点去做,那开发简直和在空中飞翔一样爽。

btw. 如果一切都OO起来,写程序真是享受,象写诗一样……

本文转自xiaotie博客园博客,原文链接http://www.cnblogs.com/xiaotie/archive/2009/05/21/1485795.html如需转载请自行联系原作者


xiaotie 集异璧实验室(GEBLAB)

相关文章
|
6月前
|
存储 人工智能 云栖大会
【云栖大会】阿里云设计中心 × 教育部协同育人项目成果展,PAI ArtLab助力高校AIGC教育新路径
【云栖大会】阿里云设计中心 × 教育部协同育人项目成果展,PAI ArtLab助力高校AIGC教育新路径
|
6月前
|
JSON JavaScript Java
使用JSONObject.getString()时报错:Cannot resolve method ‘getString‘ in ‘JSONObject‘,详解JSONObject三种库的用法
通过以上对比可以发现,虽然这三种库都可以操作 JSON 数据,但它们的功能设计和使用场景各不相同: • org.json.JSONObject 适合基础场景,方法直观易懂。 • org.json.simple.JSONObject 功能最简单,需要更多手动操作。 • cn.hutool.json.JSONObject 适合复杂项目,提供了更强的扩展能力。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
7月前
|
关系型数据库 MySQL 数据库
Docker下Mysql8数据备份与恢复
通过以上步骤,您可以在Docker环境下高效地备份和恢复MySQL 8数据库。备份数据时,使用 `mysqldump`工具生成逻辑备份文件,并存储到指定目录;恢复数据时,使用 `mysql`工具从备份文件中读取数据并恢复到数据库。自动化脚本和定时任务的配置可以进一步简化备份和恢复的管理过程。
564 41
|
9月前
|
存储 网络协议 安全
用于 syslog 收集的协议:TCP、UDP、RELP
系统日志是从Linux/Unix设备及网络设备生成的日志,可通过syslog服务器集中管理。日志传输支持UDP、TCP和RELP协议。UDP无连接且不可靠,不推荐使用;TCP可靠,常用于rsyslog和syslog-ng;RELP提供可靠传输和反向确认。集中管理日志有助于故障排除和安全审计,EventLog Analyzer等工具可自动收集、解析和分析日志。
539 2
|
移动开发 小程序 物联网
智能车位引导系统:智能导航,便捷停车
摘要(Markdown格式): 智慧停车场结合室内定位导航技术,提升停车效率及用户体验。设计包括移动端H5导航小程序、大屏端智能联动,以及基于GIS的物联网管理。系统提供空余车位引导、车位预约、多样化寻车及AR导航等功能,支持与不同停车场系统对接,确保可扩展性。通过优化的离场引导,减少车主寻找出口的时间,整体提升了大型公共场所的客流管理和信息化水平。
649 0
智能车位引导系统:智能导航,便捷停车
|
开发框架 算法 .NET
C#使用MiniExcel导入导出数据到Excel/CSV文件
C#使用MiniExcel导入导出数据到Excel/CSV文件
329 0
|
网络协议 关系型数据库 MySQL
如何实现在公网下使用navicat图形化工具远程连接本地内网的MariaDB数据库
如何实现在公网下使用navicat图形化工具远程连接本地内网的MariaDB数据库
369 0
|
机器学习/深度学习 TensorFlow 算法框架/工具
Whale 基于 Tensorflow 深度学习分布式训练框架|学习笔记
快速学习 Whale 基于 Tensorflow 深度学习分布式训练框架。
683 0
Whale 基于 Tensorflow 深度学习分布式训练框架|学习笔记
|
机器学习/深度学习 人工智能 小程序
AI赋能创意「logo生成器」带来全新体验!
在借助AI大模型背后先进的人工智能和深度学习算法,阿里云企航logo生成小程序为您提供智能化的设计体验。
2001 0
AI赋能创意「logo生成器」带来全新体验!
|
消息中间件 安全 网络协议