FMStocks7 , 不错的一个.NET 示例程序

这个示例程序估计很多人都用过。没有用过的话可以从
http://www.microsoft.com/downloads/details.aspx?FamilyID=966C3279-2EE9-4E14-A4F7-D4807239A396&displaylang=en 下载


一个简单的股票买卖程序,数据库访问和部分业务逻辑提供了 COM+ 企业服务和 DotNet Remoting 两种方式。
具体的架构参考一下图:

fm.gif

两种分布式应用,有一下特征,呵呵。 msdn 说得

  • ASP.NET 应用程序(通过 IIS)承载远程组件以利用进程回收等功能和应用程序配置。
  • 通过 HTTP 信道使用二进制格式化程序进行远程调用。使用 HTTP 信道将能够使用 IIS 承载组件,而二进制格式化程序的性能优于 SOAP 格式化程序。
  • GAM 和 BLL 对象都是无状态的,这使得可以在 Application Center 群集中承载它们。
  • 虽然 GAM 和 BLL 对象是无状态的,但 Fitch and Mather 7.0 使用实例方法(与静态方法相对)以便能够远程处理方法调用。静态方法总是在本地执行,即与调用方在同一个 AppDomain 类中执行。有关更多信息,请参见。

当然对于第一点,你也可以host  Remoting 对象在一个 console 应用程序或者 windows 服务中。从而可以使用 TCP/Binary. 缺点TCP 需要自己去考虑安全监听。

我觉得有几点写的不错:
1。清晰的应用程序架构,由于问题比较简单。很容易整理清楚
2。 很好的coding 风格。最近在整理公司的代码规范,发现 FMStocks7 的代码注释确实不错。
比如一下是 买一个新股票的 DAO 代码
ExpandedBlockStart.gifContractedBlock.gif        /**////    <summary>
InBlock.gif        
///    Purchase shares of a specific stock.        
InBlock.gif        
/// <param name='accountID'>The accountID number</param>
InBlock.gif        
///    <param name='txID'>The transaction ID</param>
InBlock.gif        
///    <param name='ticker'>The ticker symbol to be purchased</param>
InBlock.gif        
///    <param name='shares'>Amount of shares</param>
InBlock.gif        
///    <param name='sharePrice'>The share price</param>
InBlock.gif        
///    <param name='commission'>The buy commission</param>
InBlock.gif        
///    <returns>BrokerStatus enum value</returns>
ExpandedBlockEnd.gif        
/// </summary>

None.gif
None.gif        
public BrokerStatus Buy( int accountID, int txID, string ticker, int shares, decimal sharePrice, decimal commission )
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif{
InBlock.gif            Debug.Assert( sproc 
== null );
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif            
try    dot.gif{
InBlock.gif                BrokerStatus status;
InBlock.gif            
InBlock.gif                
// Initialize order info
InBlock.gif

InBlock.gif                Order order;
InBlock.gif
InBlock.gif                order.AccountID  
= accountID;
InBlock.gif                order.TxID       
= txID;
InBlock.gif                order.Ticker     
= ticker;
InBlock.gif                order.Shares     
= shares;
InBlock.gif                order.SharePrice 
= sharePrice;
InBlock.gif                order.Commission 
= commission;
InBlock.gif
InBlock.gif                
// Debit account balance
InBlock.gif

InBlock.gif                
decimal debitAmt = ( decimal )order.Shares * order.SharePrice + order.Commission;
InBlock.gif                GAM gam 
= new GAM();
InBlock.gif
InBlock.gif                
if ( gam.DebitAccountBalance( order.AccountID, debitAmt  ) == 0 )
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    status 
= BrokerStatus.InsufficientFunds;
InBlock.gif                    ContextUtil.SetAbort();
ExpandedSubBlockEnd.gif                }

InBlock.gif                
else
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                      
// Create parameter array
InBlock.gif

InBlock.gif                    SqlParameter[] parameters 
=
ExpandedSubBlockStart.gifContractedSubBlock.gif                    
dot.gif{
InBlock.gif                        
new SqlParameter( "@TxID",       SqlDbType.Int,   4 ), // 0
InBlock.gif
                        new SqlParameter( "@AccountID",  SqlDbType.Int,   4 ), // 1
InBlock.gif
                        new SqlParameter( "@Ticker",     SqlDbType.NChar, 6 ), // 2
InBlock.gif
                        new SqlParameter( "@Shares",     SqlDbType.Int,   4 ), // 3
InBlock.gif
                        new SqlParameter( "@SharePrice", SqlDbType.Money, 8 ), // 4
InBlock.gif
                        new SqlParameter( "@Commission", SqlDbType.Money, 8 ), // 5
ExpandedSubBlockEnd.gif
                    }
;
InBlock.gif
InBlock.gif                    
// Set parameter values and directions
InBlock.gif

InBlock.gif                    parameters[ 
0 ].Value = order.TxID;
InBlock.gif                    parameters[ 
1 ].Value = order.AccountID;
InBlock.gif                    parameters[ 
2 ].Value = order.Ticker;
InBlock.gif                    parameters[ 
3 ].Value = order.Shares;
InBlock.gif                    parameters[ 
4 ].Value = order.SharePrice;
InBlock.gif                    parameters[ 
5 ].Value = order.Commission;
InBlock.gif
InBlock.gif                    
// Run the stored procedure
InBlock.gif

InBlock.gif                    sproc 
= new StoredProcedure( "Broker_Buy", parameters );
InBlock.gif                    
int error = sproc.Run();
InBlock.gif                    Debug.Assert( error 
== 0 );
InBlock.gif
InBlock.gif                    status 
= BrokerStatus.Success;
InBlock.gif                    ContextUtil.SetComplete();
ExpandedSubBlockEnd.gif                }

InBlock.gif                
return status;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
catch
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                ContextUtil.SetAbort();
InBlock.gif                
throw;
ExpandedSubBlockEnd.gif            }

ExpandedBlockEnd.gif        }

None.gif



有几点很符合代码规范
1。合理的使用断言
2。// 注释风格
3。异常处理
4。。。。emteeth.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/467458.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab 时序数据,9 个 MATLAB 数据科学速查表 - MATLAB Simulink

请选择其一AlabamaAlaska美属萨摩亚APO/FPO AAAPO/FPO AEAPO/FPO APArizonaArkansasCaliforniaCaroline IslandsColoradoConnecticutDelawareDistrict of ColumbiaFlorida格鲁吉亚关岛HawaiiIdahoIllinoisIndianaIowaKansasKentuckyLouisianaMaineMariana Islands马绍尔群岛Mar…

滚动到页面底部自动加载内容

上网时经常会看到许多酷炫的网页&#xff0c;其中给我印象较深刻的是鼠标滚动到页面底部时会自动加载内容&#xff0c;一直都很好奇是怎么样做到的&#xff0c;于是自己也尝试着写了一下。 先上个完整代码吧&#xff1a; <!DOCTYPE html> <html lang"en">…

DW制作过程基本标准常识

1、字体大小&#xff0c;一般内容是12号字&#xff0c;但新闻页的内容标准大小是14号字。转载于:https://www.cnblogs.com/shuang611/archive/2004/12/09/74782.html

这个结构体对齐输出有意思

这个题目是我在群里看到大家讨论的&#xff0c;既然是讨论的了&#xff0c;那我就拿出来说说&#xff0c;因为笔试面试的时候&#xff0c;可能就会遇到这样的题目。实例代码#include "stdio.h" #include "stdint.h"struct Obj {char a; //1uint32_t b;//4u…

声压级 matlab,语音信号处理教程(二)声音的声压级和响度

本节内容我们来看下如何用Matlab和Python计算声音的声压级和响度。声压级1. 声压级定义首先来看声压级&#xff0c;这个就是指的我们平时所说的声音有多少分贝。声压定义为声波在某一点产生的逾量瞬时压强的均方根值。由于声压容易被人耳感知&#xff0c;也易于测量&#xff0c…

javascript 之作用域-06

作用域 作用域&#xff1a;是指变量可访问的范围&#xff0c;他规定了如何查找变量&#xff0c;也就是确定当前执行代码对变量的访问权限。 作用域有两种工作模式&#xff1a; 静态作用域 &#xff1a;又称为词法作用域&#xff0c;在编译阶段就可以决定变量的引用&#xff0c;…

[导入]基于Web的B/S结构实时监控系统[转]

文章编号&#xff1a;1009-0193(2002)01-0062-02基于Web的B&#xff0f;S结构实时监控系统尉学军&#xff0c;刘 跃&#xff08;贵州工业大学 电气工程学院&#xff0c;贵州 贵阳 550003&#xff09;摘 要&#xff1a;提出了怎样利用Web技术对生产过程进行监控&#xff0c;介绍…

被裁之后才明白:有一种抗风险能力,叫做会讲故事

如果你注意观察&#xff0c;会发现周围总有这么一种人&#xff1a;他说的每句话&#xff0c;单拎出来都没毛病&#xff0c;但一说出口就让人无法接受&#xff0c;很难说服你。尤其在职场里&#xff0c;这种无效沟通特别多&#xff0c;以至于产生了庞大的“沟通成本”&#xff1…

saltstack php,Saltstack快速入门简单汇总

[rootmaster~]# salt \* test.pingminion-1:Trueminion-2:Trueminion-3:Trueminion-4:TrueTrue代表正常&#xff0c;没有响应当然代表客户端没有启动或者没有认证成功之类的。指定目标主要有五种方式一&#xff1a; Global&#xff0c;即salt默认的匹配方式&#xff0c;能识别终…

课下测试03!03!03!题目截图及解析(不完全正确)第四周--信息安全系统设计基础...

课下测试03&#xff0c;也就是第三章内容&#xff0c;以下分析和解析仅供参考哦~ 注意&#xff01;最好是对着题目看一下书&#xff0c;自己思考一下题目&#xff08;毕竟我页数都给你标出来了&#xff09;&#xff0c;不是说这样你就能提高了&#xff0c;而是我正确率真不高&a…

哦!数组还能这么用,学到了!

来源&#xff1a;公众号【编程珠玑】作者&#xff1a;守望先生ID&#xff1a;shouwangxiansheng这个问题源于读者在阅读redis源码时的一个疑问。先看下面的代码&#xff0c;对于包含动态字符串成员的两个结构体Test0和Test1占用空间分别是多少呢&#xff1f;//来源&#xff1a;…

推荐开源代码2004/12/17

严正声明&#xff1a;本博客中的任何随笔、文章、图片等内容都不能私自转载&#xff0c;必须书面征得作者同意才能转载&#xff0c;并不能随意篡改&#xff0c;如要作出任何改动&#xff0c;必须书面征得作者同意方可&#xff0c;作者拥有一切权利并保留一切追究权利&#xff0…

matlab图片取模程序,彩屏图像取模,BMP图像提取程序示例 | 学步园

//bmconv.c#include #include#include#include"bmconv.h"/*************************************************************************文件名称:bmconv.c/bmconv.h文件功能:BMP提取到点阵RGB显示创建时间:2013-04-20文件作者:女孩不哭文件版本:1.0文件说明:专用***…

pug模板引擎——jade

随着前端项目工程化的发展&#xff0c;代码结构越来越复杂&#xff0c;代码却越来越简单&#xff0c;为了将更多的精力集中在业务功能上面&#xff0c;对页面的快速构建需求日益剧增&#xff0c;同js、css一样&#xff0c;html也出现了各种各样的工具&#xff0c;即模板引擎&am…

广东,就是这么横?

昨晚的稿 今天发一下 应该有好久好久没有写篮球相关的文章了&#xff0c;因为之前写了被骂了&#xff0c;不过&#xff0c;今天不一样&#xff0c;毕竟方超巨打得这么好&#xff0c;不吹一下&#xff0c;总感觉今天不完整&#xff0c;骂就骂了吧&#xff0c;反正也不差这一次了…

在ASP.NET中利JavaScript实现控件的聚焦

在Windows应用程序中很容易控制控件的聚焦&#xff0c;但是在ASP.NET中并没有提供这样的功能&#xff0c;但是我们同样可以实现这样的功能&#xff0c;这篇文章就讲述了通过JaveScript实现在页面上某一特定控件获得焦点的功能。 下面是用到的JavaScript代码。 <script langu…

mysql自动备份发邮箱,定时任务自动备份数据库并邮件发送

我原本是使用Vastar的第一个脚本方案来自动备份WordPress数据库并邮件发送的&#xff0c;不过后来因为更换服务器&#xff0c;不知道为什么造成了会二次备份并有错误提示。刚好Vastar又给了一个更简洁的方法&#xff0c;于是昨天就替换掉了。不过Vastar的是同时备份数据库和网站…

电厂各类设备原理动图,绝对让你看花眼!

▲ 火力发电流程原理▲ 核能发电流程原理▲ 水力发电流程原理▲ 光热发电原理▲ 垃圾发电原理▲ 蒸汽吸收式制冷原理▲ 尿素热解脱硝流程原理▲ 湿法脱硫工艺原理▲ 钢球磨煤机内煤的破碎原理▲ 碎煤机工作原理▲ 螺旋输送机&#xff08;绞龙&#xff09;原理▲ 多管电除尘器▲…

也谈MMU管理机制

1&#xff0c;结构&#xff1a; MMU存储器系统的结构允许对存储器系统的精细控制。大部分的控制细节由存在存储器中的转换表提供。这些表的入口定义了从1KB 到1MB 的各种存储器区域的属性。这些属性包括&#xff1a; 虚拟地址到物理地址映射 ARM 处理器产生的地址叫虚拟…

__ATTRIBUTE__ 你知多少?

_ATTRIBUTE__ 你知多少&#xff1f; 1 #include "stdio.h"2 3 /* 地址参考基准 */4 5 char r1;6 short r2;int refer;7 8 struct p9 { 10 int a; 11 12 char b; 13 14 short c; 15 16 }__attribute__((aligned(4))) pp; 17 /* 4字节对齐&#xff0c;a…