惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LINUX DO - 热门话题
Stack Overflow Blog
Stack Overflow Blog
B
Blog
WordPress大学
WordPress大学
Project Zero
Project Zero
P
Palo Alto Networks Blog
阮一峰的网络日志
阮一峰的网络日志
博客园 - 司徒正美
有赞技术团队
有赞技术团队
S
SegmentFault 最新的问题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
小众软件
小众软件
T
Tailwind CSS Blog
Forbes - Security
Forbes - Security
F
Full Disclosure
SecWiki News
SecWiki News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Hacker News: Ask HN
Hacker News: Ask HN
C
Check Point Blog
Microsoft Security Blog
Microsoft Security Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
F
Fortinet All Blogs
Cisco Talos Blog
Cisco Talos Blog
G
Google Developers Blog
J
Java Code Geeks
Google DeepMind News
Google DeepMind News
人人都是产品经理
人人都是产品经理
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recorded Future
Recorded Future
O
OpenAI News
Spread Privacy
Spread Privacy
MongoDB | Blog
MongoDB | Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
C
Cybersecurity and Infrastructure Security Agency CISA
S
Securelist
V
Vulnerabilities – Threatpost
Y
Y Combinator Blog
IT之家
IT之家
U
Unit 42
腾讯CDC
S
Security Affairs
C
Cisco Blogs
Schneier on Security
Schneier on Security
The Last Watchdog
The Last Watchdog
B
Blog RSS Feed
宝玉的分享
宝玉的分享
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
S
Security @ Cisco Blogs
Cyberwarzone
Cyberwarzone
T
The Blog of Author Tim Ferriss

博客园 - loli

SQL Server2005中的Intergate Service(SSIS)与Oracle数据库的迁移性能 在PD中导入Excel自动生成表结构 结束?开始! 更新一次,Grid的多列效果 Infragistics的Grid控件 - loli - 博客园 加入EReader团队的开篇章 C++/CLI draft 1.8 学习C++/CLI发现的一些问题,算不算Bug? 总结成了回顾 BlogReader存盘方式修改 学习ULike.NET,也分析DirectX Sample BlogReader更新(只用Net2.0) BlogReader0.2后补设计图(含Net1.1版本下程序) 自写程序BlogReader 的一次升级,算是0.2了吧 BlogReader新的一点小些改动 话接上回,自写程序BlogReader 0.1版 自写VS2005程序BlogReader .Net1.1版本 话接上回,自写VS2005程序BlogReader 0.1.1.1版 仿SharpReader自写VS2005程序,有SharpReader的70%左右功能
站在别人的肩膀上的开发
loli · 2006-08-12 · via 博客园 - loli

我是一个懒人,更新Blog就可以看出来,再加上没有好的笔头,所以文章自然就少。
现在赋闲在家,正好整理一下这一年工作的心得。

虽然在公司带的是一个较小的应用项目,可是却像麻雀一样,样样俱全。数据访问、多层开发、B/S和C/S共存。
在项目完成后,还有产品化的需求。
虽然在职期间,设想并没有全部实现,可是这并不妨碍我继续按照需求思考下去。

通过这段时间的考虑以及实验,终于有一套我认为对类似项目的最佳方案。

在我的方案里,当然还是遵从前辈们提出的三层框架。

数据层还是使用我熟悉的开源软件iBatis.Net。
使用过的人可能知道,这是一套数据映射软件,走得是一条中间路线,符合一种中庸之道。但是在使用中有两个较大缺点:
1.需要一定的人力编写xml映射文件。
2.程序启动时需要较长的加载时间。
但是优点与缺点一样明显,可以在完全不用改动已有数据库系统的基础上立刻应用。这已在项目中得到了验证。
上述的两个缺点也不是不可克服。通过借鉴Java环境的例子,编写代码生成工具以大大减少工作量;对于C/S结构采取访问Web Services方式彻底将客户端与数据源之间的藕合松绑,同时也顺带解决了启动时间长的问题,并且可以通过重复加载配置文件,达到动态修改程序应用环境的目的。
在我的设想中,C/S和B/S程序访问访问的是同一套Web Services接口。

逻辑层则是一个与具体领域密切相关的问题,在这方面我没有太多的想法与经验。

我想说的反倒是表现层。在抛开版权不说(这一领域不了解),完全可以做到站在别人的肩膀上的开发。
对于与数据打交道的C/S架构下的程序说,一般软件界面都没有太多需要标新立异的要求,甚至还希望公司软件具有统一风格。
那么在这里,提出一下我的想法:利用SharpDevelop的框架作为程序的外壳。
简单列出一下几个优点:
1.可以做到几乎是全插件程度的软件开发。
2.状态保存功能已经实现,只需要作部分工作就可。
3. ...想到了很多,以后再说。
下面是我做试验是的一个程序界面截图:

可以注意一下左侧的属性窗口,这一类的功能可以灵活的放置到框架一级或是该程序功能一级。

通过作一些修改工作,可以在程序中动态控制可使用的插件。这是SharpDevelop自带的该功能,没有作任何工作就可以在程序使用,也是一个标准的插件。Manager和销售记录是实验代码加入的插件。
下面是插件的配置文件,是一种完全自解释的方式。有兴趣的可以看看:

<AddIn name        = "HshSale.App"
       author      
= "xhluo"
       copyright   
= ""
       description 
= "HshSale.App">
    
    
<Manifest>
        
<Identity name = "HshSale.App"/>
    
</Manifest>
    
    
<Runtime>
        
<Import assembly = "HshSale.App.dll">
        
</Import>
    
</Runtime>
    
  
<Path name = "/Workbench/MainMenu">
    
<MenuItem id = "Manager" label = "Manager" type="Menu"
              insertafter 
="View" insertbefore ="Tools">
      
<MenuItem id = "ProductManager"
              label 
= "产品管理"
              shortcut 
= "Control|P"
              class 
= "HshSale.App.ProductManagerCommand"/>
      
<MenuItem id = "DaySaleRecord"
               label 
= "日销售记录"
               icon 
= "Icons.16x16.NextWindowIcon"
               class 
= "HshSale.App.DaySaleRecordCommand"/>
    
</MenuItem>
 

    
<MenuItem id = "SaleRecord" label = "销售记录" type="Menu"
              insertafter 
="View" insertbefore ="Tools">
                    
<MenuItem id = "DaySaleRecord"
               label 
= "DaySaleRecord"
               icon 
= "Icons.16x16.NextWindowIcon"
               class 
= "HshSale.App.DaySaleRecordCommand"/>
       
</MenuItem>
  
</Path>

  
<Path name = "/Workbench/Pads">
    
<Pad id       = "ProjectBrowser"
             category 
= "Main"
             title    
= "${res:MainWindow.Windows.ProjectScoutLabel}"
             icon     
= "PadIcons.ProjectBrowser"
         shortcut 
= "Control|Alt|F"
         class    
= "HshSale.App.SDPad"/>
  
</Path>
  
</AddIn>

当然这不是一个立马可用的框架,权限和日志等必备功能还没有带全。但是作为一段实验性质的代码,我想已经达到了目的:即具备了在实际中使用的条件。而权限和日志当然也可以采用现有的各种思路放到程序中:AOP或是其他灵活性差一点但效率更高的方案。

在B/S结构,由于项目经验太少,就不多说。但从我了解的信息看,Dnn应该也可以接替SharpDevelop的作用。

抛砖引玉,一己之见。