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

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

两种分布式应用,有一下特征,呵呵。 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 代码

        /**////    <summary>
        ///    Purchase shares of a specific stock.        
        /// <param name='accountID'>The accountID number</param>
        ///    <param name='txID'>The transaction ID</param>
        ///    <param name='ticker'>The ticker symbol to be purchased</param>
        ///    <param name='shares'>Amount of shares</param>
        ///    <param name='sharePrice'>The share price</param>
        ///    <param name='commission'>The buy commission</param>
        ///    <returns>BrokerStatus enum value</returns>
        /// </summary>

        public BrokerStatus Buy( int accountID, int txID, string ticker, int shares, decimal sharePrice, decimal commission )
        {
            Debug.Assert( sproc == null );

            try    {
                BrokerStatus status;
            
                // Initialize order info

                Order order;

                order.AccountID  = accountID;
                order.TxID       = txID;
                order.Ticker     = ticker;
                order.Shares     = shares;
                order.SharePrice = sharePrice;
                order.Commission = commission;

                // Debit account balance

                decimal debitAmt = ( decimal )order.Shares * order.SharePrice + order.Commission;
                GAM gam = new GAM();

                if ( gam.DebitAccountBalance( order.AccountID, debitAmt  ) == 0 )
                {
                    status = BrokerStatus.InsufficientFunds;
                    ContextUtil.SetAbort();
                }
                else
                {
                      // Create parameter array

                    SqlParameter[] parameters =
                    {
                        new SqlParameter( "@TxID",       SqlDbType.Int,   4 ), // 0
                        new SqlParameter( "@AccountID",  SqlDbType.Int,   4 ), // 1
                        new SqlParameter( "@Ticker",     SqlDbType.NChar, 6 ), // 2
                        new SqlParameter( "@Shares",     SqlDbType.Int,   4 ), // 3
                        new SqlParameter( "@SharePrice", SqlDbType.Money, 8 ), // 4
                        new SqlParameter( "@Commission", SqlDbType.Money, 8 ), // 5
                    };

                    // Set parameter values and directions

                    parameters[ 0 ].Value = order.TxID;
                    parameters[ 1 ].Value = order.AccountID;
                    parameters[ 2 ].Value = order.Ticker;
                    parameters[ 3 ].Value = order.Shares;
                    parameters[ 4 ].Value = order.SharePrice;
                    parameters[ 5 ].Value = order.Commission;

                    // Run the stored procedure

                    sproc = new StoredProcedure( "Broker_Buy", parameters );
                    int error = sproc.Run();
                    Debug.Assert( error == 0 );

                    status = BrokerStatus.Success;
                    ContextUtil.SetComplete();
                }
                return status;
            }
            catch
            {
                ContextUtil.SetAbort();
                throw;
            }
        }

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

FMStocks7 , 不错的一个.NET 示例程序相关推荐

  1. 一个多线程示例程序的BUG修复

    一个多线程示例程序的BUG修复 在<.NET 4.0面向对象编程漫谈 >的<应用篇>一书中,我介绍了一个使用"信号量(Semaphore) "同步对象模拟多 ...

  2. Java黑皮书课后题第8章:*8.8(所有最近的点对)修改程序清单8-3,找出所有所有具有最小距离的点对。下面是一个运行示例

    *8.8(所有最近的点对)修改程序清单8-3,找出所有所有具有最小距离的点对.下面是一个运行示例 题目 题目描述与运行示例 程序清单8-3 破题 代码 题目 题目描述与运行示例 *8.8(所有最近的点 ...

  3. 一个微信小程序开发示例

    一个微信小程序开发示例(豆瓣电影) 新版本(不包含工作流)请移步至:https://github.com/zce/weapp-douban 当前仓库会暂缓更新,主要留下来给大家答疑 需要基础教程的朋友 ...

  4. .hpp文件_3 OpenCV的头文件说明及第一个示例程序

    在安装OpenCV库并设置好编程环境之后,我们的就可以让代码中发生一些有趣的事情.但是首先必须弄清楚头文件.这些头文件反映了前面介绍的OpenCV模块化结构.主头文件是... / include / ...

  5. 做一个微信小程序需要多少钱?两种示例

    在需求明确之前,做一个微信小程序需要多少钱还不清楚.我们选择了两种目前需求量很大的小程序,并推出了价格.你可以看看有没有你想要的: [服务微信小程序] 一般是订购小程序,预订小程序,常用于服装.餐厅. ...

  6. angular1.2.27_Angular 8 + Spring Boot 2.2:立即构建一个CRUD应用程序!

    angular1.2.27 "我喜欢编写身份验证和授权代码." 〜从来没有Java开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权 ...

  7. 怎么运行aws的示例程序_使Spring Boot应用程序在AWS上无服务器运行

    怎么运行aws的示例程序 在之前的 几篇 文章中,我描述了如何设置Spring Boot应用程序并在AWS Elastic Beanstalk上运行它. 尽管这是从物理服务器到云服务器的重要一步,但还 ...

  8. Angular 8 + Spring Boot 2.2:立即构建一个CRUD应用程序!

    "我喜欢编写身份验证和授权代码." 〜从来没有Java开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证. 如果您已 ...

  9. 程序员疯狂记事:如何利用众多技术栈构建一个 Web 应用程序?!

    [CSDN 编者按]"Elixir.Phoenix.Absinthe.GraphQL.React和Apollo"--在这几个关键词中,有几个是身为开发者的你一直想玩但还没来得及玩的 ...

最新文章

  1. Android 双屏开发 Presentation 的使用教程
  2. 放心,GPT-3不会“杀死”编程
  3. BNU 26349——Cards——————【区间dp】
  4. 监控路由器虚拟服务器,远程监控路由器虚拟服务器设置
  5. SAP 电商云 UI 如何知道当前的 breakpoint 是 xl - extremely large?
  6. 学习笔记(48):Python实战编程-grid布局
  7. P3804-[模板]后缀自动机【SAM】
  8. python Requests登录GitHub
  9. python3列表推导式矩阵转置_python3进阶之推导式1之列表(list)推导式(comprehensions)...
  10. 计算机无法进系统咋办,主编教您电脑无法进入系统怎么办
  11. 基金盘后业务的详细设置
  12. vue watch 修改滚动条_vue 中滚动条始终定位在底部的方法
  13. sqoop导入/导出
  14. 为什么以太网有最短帧长度的要求_线束工程师:车载以太网介绍
  15. 关于实习4个月的一些总结
  16. php没有错误信息,php – 如何调试没有错误信息的错误?
  17. SW练习_POJ2007_CCW
  18. Failure to find xxx in 中央仓库
  19. git的学习笔记(一):git本地操作
  20. DDD 为什么能火起来?和微服务有啥关系?

热门文章

  1. 《Python Cookbook 3rd》笔记(5.19):创建临时文件和文件夹
  2. 开封高级高考2021成绩查询,2021开封市地区高考成绩排名查询,开封市高考各高中成绩喜报榜单...
  3. php 配置 gd2,配置PHP对gd库的支持
  4. 小米C++开发 面试 准备阶段和部分真题
  5. 离合器半联动点的判断和技巧 为您支招
  6. 路由器和交换机的区别详解
  7. AMD OpenCL 大学课程
  8. 解决: Elements in iteration expect to have ‘v-bind:key‘ directives
  9. 【LA3415 训练指南】保守的老师 【二分图最大独立集,最小割】
  10. 1.3 使用电脑测试MC20的电话语音功能