什么是适合生产管理软件的架构?

作为一名CSharper,最早接触的是单机程序以及局域网上的同构应用程序。这类应用一般无需数据库或直连数据库,应用间比较独立,用于实现一些具体的业务逻辑——如数据分析,报表展示,动画交互,调用系统资源与其它设备通讯等功能。对于生产管理软件,这种单机架构其实有很大的优势——如响应迅速,与生产设备交互方便,画面呈现丰富且交互简单,可定制化等。

然而这种单机架构的缺点也显而易见,必须基于.NET平台,直连数据库的方式并不安全,维护难度较大。随着技术的发展,移动办公成为一大趋势,尤其是非.NET平台的设备的加入使得单机架构捉襟见肘。事实上大多数的平板,PDA,一体机等均为安卓系统,即使是Win10系统的设备,我们仍需要对PC平台的软件进行精简以适应移动平台。更何况出于安全考虑,安卓APP是不允许直连服务器数据库,必须基于CS架构。

为了实现跨平台,大家首先想到的就是BS架构。B端通过浏览器方式呈现业务内容,所有的资源均从S端获取,并且数据库操作仅在S端进行,不仅更为安全,同时部署与更新也非常方便。也是基于此,绝大多数的商业应用都已BS模式呈现,如电商,媒体,甚至网页游戏。

但BS架构的缺点也显而易见,首先是对网络的高要求,以及对服务器的高要求,否则会影响到B端的访问效率;其次是B端浏览器适配的问题,由于同样的代码在不同的浏览器上会有不同的呈现,因此需要耗费大量资源进行浏览器适配;对于需要调用系统资源的情况,BS模式难度很大,纵然可以通过JS脚本加各种插件的形式来达成目的,但费时费力且效果不尽人意。

对于轻量级的商业应用,BS架构的缺点并不致命,但是对于生产管理软件来说,就有些尴尬了。首先是网络问题,生产现场环境复杂,并且并不是每个工厂都有专业网管进行运维,因此任何的网络故障都会对B端产生严重的影响;而生产管理软件投入的资源远没有商业网站那么大,浏览器适配基本上不会花太大精力,解决方案为选用固定的浏览器版本,这样做会给用户带来不小的困惑;而调用系统资源的情况在生产管理软件中也会经常出现,BS架构的应用在与扫描枪、单片机、PLC等外设的配合上,显然效率不高。

那么回到CS架构上,在各种系统环境中开发C端APP,通过WebAPI与S端通讯,同样数据库操作仅在S端进行。C端APP具备单机架构的优点,与单机架构的区别在于APP不再直连数据库,而是通过WebAPI进行交互。在S端做好API,可以将许多业务从C端迁移到S端,大幅提升其它系统环境的APP开发效率。

对于单机架构与BS架构的缺点,CS架构也有不错的应对方案。安全性上,由于是通过API交互,多层安全保障比BS架构更加的安全;原生开发的优势就在于调用系统资源效率高,能有效的和外设配合工作;在不同系统环境上有不同APP,连接统一的C端后台,也可以在C端进行统一管控,远程部署与升级;在对网络的要求上,可以缓存大量数据减轻网络波动的干扰,甚至可以脱机运行,联机后再同步。

尽管CS架构有许多优点,对于轻量级的流程管理业务,Web方案依然更为合适。这类业务无需和外设交互,实时性要求较高,更主要的是业务变更较为频繁。采用Web方案可以无需在不同系统环境开发同样的UI界面的APP,也不至于在业务变更时频繁升级软件对用户造成困扰。

因此,我认为最适合生产管理软件的架构为融合的CS架构——首先每种系统环境都有一个统一的入口平台,采用统一的升级策略与安全策略;平台上各应用根据实际场景选用最合适的技术手段,web方案的应用采用内嵌浏览器进行操作,实现BS的融合,同时排除浏览器适配的问题;流程管理业务采用web方案,其它复杂业务采用定制开发APP方案,所有应用都在入口平台上根据配置来呈现,用户根据需要选择进入,或者根据配置开机直接启动;额外的可以有一套配置管理系统,对C端进行权限管理与应用配置。

不可否认,融合CS架构对技术要求应该是最高的,它似乎需要几乎所有主流编程语言软件工程师的参与。那么作为一名CSharper,有没有可能用C#来完成这个架构呢?我觉得在Serenity Application Platform,CefSharp与Xamarin的帮助下,我觉得可行。

Serenity 是建立在开源技术上的 ASP.NET MVC/Javascript 应用程序平台,最适合应用于有大量数据输入的表单业务应用程序或者面向公众的后台管理网站。它帮我们封装了大量的工作,我们仅需要懂得基本的html、css、javascript、less、typescript知识,就能快速的设计出各类业务网站。

CefSharp可以帮助我们在WPF程序中调用Webkit内核,使得Web应用可以在入口平台上高速运行,且无需额外安装或打开其它浏览器。

Xamarin可以让我们用C#语言进行跨平台开发,将我们基于在Windows环境上搭建的入口平台移植到安卓或IOS平台,并且开发一些跨平台APP。

基于大多数生产管理软件都使用了C#作为开发语言,因此本文仅从C Sharper的角度对生产管理软件的架构进行分析,如果大家有更好的想法,欢迎留言探讨。

KPT个人日志原创作品

精诚所至

金石为开

欢迎关注KPT个人日志

本公众号为非赢利公益性质

KPT日志是一个加入时光比对功能的日志工具

欢迎有梦想有恒心有毅力的小伙伴使用

希望大家喜欢,祝诸事顺利

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180730G1WGRL00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券