C/S架构程序应用广泛,比如常见的QQ、微信、Outlook,还有手机上的各种APP都是C/S架构的。C指的是Client,即客户端,S指的是Server,即服务端。

经常听到初学者争论,是学C/S结构还是学B/S结构?而笔者以为,两种架构都要学,不仅要学,而且还要精通。至于用哪种架构解决问题,那就要看工作需要了。在企业管理系统领域,C/S架构的系统占有非常重要的地位,比如ERP、MES系统,C/S架构的居多。对企业而言,只要能提高操作效率,他们并不在意是什么架构。

今天笔者就和大家分享一下如何开发一套稳健、高效的的C/S架构的系统。

笔者认为,一套成熟的C/S框架应该解决好以下核心问题:

服务器端功能定位

C/S中S指的是Server,而不是数据库服务器。很多C/S架构的系统,都是直连服务器上的数据库,这样不仅增加数据库负担,还存在安全风险。有的程序员为了省事,直接将数据库的账号密码以明文形式写在了客户端配置文件,这样很不安全。所以,我们的服务器端应该是一个Web服务器和数据库服务器的组合体,客户端通过Web服务器连接数据库执行各种数据库增删改查的操作。Web服务器还可进行各种业务逻辑的运算。

客户端技术架构选型

客户端选择.NET还是选择Java呢?从开发效率上将,应当毫无疑问的选择.NET的Win Form 或 WPF。对于初学者,建议选择Win Form,易学,上手快,简单的需求拖拉拽就能完成。如果有一定基础,而且项目周期不是太紧张,可以选择WPF。虽然Win Form的UI界面不如WPF美观,但是Win Form有很多第三方的UI组件,效果不比WPF差,还有些效果更炫更酷。

数据库操作

管理信息系统,归根结底就是对数据库表的增删改查,开发工作离不开对SQL语句的操作,所以框架要有一个SQL Helper,简化这些操作。为了提高安全性,应当避免客户端直连数据库,框架可考虑Web Service或RESTful API之类的解决方案。

文件上传和下载

虽然数据库允许存储文件,但是毕竟数据库不是文件服务器,不是用来存储文件的,另外向数据库中存储文件会导致数据库体积过大,影响后期运维,所以要求服务器端有一个Web服务器,可以支持文件的上传和下载。相比Socket或FTP,通过HTTP方式处理文件更容易。

应用程序框架

技术架构、数据库、文件管理搞定后,接下来就要考虑应用层面的需求,比如用户管理、用户登录、权限控制、日志管理、站内消息、菜单管理、多窗体管理、基础数据、表单定义、工作流等模块。这些模块,是每一套应用系统都必须具备且优先解决的基础模块,然后才是如何开发业务模块。既然大家都面临这个问题,何不找一套现成的应用框架呢。在实际工作中,老板并不关心技术问题,对他来说,他交给你的是一件事,如果在限定的时间内保质保量的完成才是他关心的。所以,我们要做的就是整合各种工具、框架,为自己所用。

客户端自动更新方案

估计大家都回答过C/S结构和B/S结构的优缺点,相比B/S架构,很多人都担心C/S架构会增加额外的运维工作量。早期的C/S系统这种问题很突出,一旦客户端程序升级,需要IT管理员到每台电脑上手动更新。而这种客户端更新有成熟方案。

程序开发工作,从零开始,一行一行的垒代码并不是首选,选择一套成熟的框架对项目很关键,用好了框架事半功倍。

C/S框架设计经验小结的更多相关文章

  1. .NET架构设计、框架设计系列文章总结

    从事.NET开发到现在已经有七个年头了.慢慢的可能会很少写.NET文章了.不知不觉竟然走了这么多年,热爱.NET热爱c#.突然想对这一路的经历进行一个总结. 是时候开始下一阶段的旅途,希望这些文章可以 ...

  2. .NET框架设计(常被忽视的C#设计技巧)

    阅读目录: 1.开篇介绍 2.尽量使用Lambda匿名函数调用代替反射调用(走进声明式设计) 3.被忽视的特性(Attribute)设计方式 4.扩展方法让你的对象如虎添翼(要学会使用扩展方法的设计思 ...

  3. .NET框架设计—常被忽视的C#设计技巧

    .NET框架设计—常被忽视的C#设计技巧 阅读目录: 1.开篇介绍 2.尽量使用Lambda匿名函数调用代替反射调用(走进声明式设计) 3.被忽视的特性(Attribute)设计方式 4.扩展方法让你 ...

  4. 【转载】 .NET框架设计—常被忽视的C#设计技巧

    阅读目录: 1.开篇介绍 2.尽量使用Lambda匿名函数调用代替反射调用(走进声明式设计) 3.被忽视的特性(Attribute)设计方式 4.扩展方法让你的对象如虎添翼(要学会使用扩展方法的设计思 ...

  5. 新书出版《.NET框架设计—模式、配置、工具》感恩回馈社区!

    很高兴我的第一本书由图灵出版社出版.本书总结了我这些年来对框架学习.研究的总结,里面纯干货,无半句废话. 书的详情请看互动网的销售页面:http://product.china-pub.com/377 ...

  6. 偶的《javascript框架设计》终于出版

    #cnblogs_post_body p{ text-indent:2em!important; } 历时两年多,我的书终于付梓出版了.应各方面的要求,写软文一篇,隆重介绍一下此书对各位程序员的钱途有 ...

  7. Web API接口设计经验总结

    在Web API接口的开发过程中,我们可能会碰到各种各样的问题,我在前面两篇随笔<Web API应用架构在Winform混合框架中的应用(1)>.<Web API应用架构在Winfo ...

  8. 基于cocos2d-x的游戏框架设计——李成

    视频:http://v.youku.com/v_show/id_XMzc5ODUyMTI4.html?f=17330006 网易科技讯 3月31日,第四届CocoaChina开发者大会暨Cocos2d ...

  9. Android 程序框架设计

    这篇文章主要内容来自于之前我讲的一个PPT文档,现在将其整理如下.欢迎指正.以下的内容都是来自于我自身的经验,欢迎大家多提自己的建议. 1.一些概念 模式的定义: 每个模式都描述了一个在我们的环境中不 ...

随机推荐

  1. 字符编码ANSI、ASCII、GB2312、GBK、GB18030、UNICODE、UTF-8小结

    编码和解码可以理解成二进制和字符(广义的字符,包括汉字等)的映射表,编码即从字符映射至二进制,解码则为逆过程. 1.英语字符编码ASCII 开始计算机只在美国用.8字节一共可以组合出256(2的8次方 ...

  2. CodeForces 1107F. Vasya and Endless Credits

    题目简述:给定 $n \leq 500$ 个贷款方式,其中第$i$个贷款额为$a_i$元,需要$k_i$个月偿还,每月还贷$b_i$元.在每个月月初可申请其中一个贷款,而在每个月月底时需要还贷.求:( ...

  3. JS中双击和单击事件冲突解决

    在JS中代码中同一功能块中通常同时会用到单击.双击事件,但通常会遇到一个问题,就是在双击的时候即执行了一次双击事件,而且还执行了两次单击事件.此类冲突在ZTree.DHTMLX中经常遇到. 想要解决两 ...

  4. setTimeout关于函数名做参数的问题

    前几天在调bug时发现一个诡异的问题. function test(){ alert('4 seconds!'); } setTimeout(test(),4000); 这段代码立即执行,当时看不出问 ...

  5. Python 中的赋值、拷贝、引用

    在 python 中赋值语句总是建立对象的引用值,而不是复制对象.因此,python 变量更像是指针,而不是数据存储区域. 如图所示,当改变一个变量的值,另一个的值也会跟着改变.也就是浅拷贝. 若要实 ...

  6. MySQL 文件导入出错

    ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot exec ...

  7. 通过增删改查对比Array,Map,Set,Object的使用成本和实现方式

    1.Array 和 Map 对比 { // array and map 增 查 改 删 let map = new Map(); let arr = []; // 增 map.set('a', 1); ...

  8. 原来C#可以直接写二进制数的

    二进制数在C#中的写法: byte b=0b01111110 二进制字符串的解释: string bstr="0111110"; byte b=Convert.ToByte(bst ...

  9. 洛谷P3003 苹果交货Apple Delivery

    题目描述 贝西有两个又香又脆的红苹果要送给她的两个朋友.当然她可以走的\(C(1 \leq C \leq 200000)\)条"牛路"都被包含在一种常用的图中,包含了\(P(1 \ ...

  10. $.store.book[?(@.category=='fiction')].category

    表达式1 $.store.book[?(@.category=='fiction')].category json source { "store": { "book&q ...