zoukankan      html  css  js  c++  java
  • 【转】编写高质量代码改善C#程序的157个建议——建议156:利用特性为应用程序提供多个版本

    建议156:利用特性为应用程序提供多个版本

    基于如下理由,需要为应用程序提供多个版本:

    • 应用程序有体验版和完整功能版。
    • 应用程序在迭代过程中需要屏蔽一些不成熟的功能。

    假设我们的应用程序共有两类功能:第一类功能属于单机版,而第二类的完整版还提供了在线功能。那么,在功能上,需要定制两个属性“ONLINE”和“OFFLINE”。在体验版中,我们只开放“OFFLINE”功能。要实现此目的,不应该提供两套应用程序,而应该通过最小设置。为一个应用程序输出两个发布版本。这一切,可以通过.NET中的特性(Attribute)来实现。

        class MyService
        {
            [Conditional("ONLINE")]
            public void Testing()
            {
                Console.WriteLine("完整功能版");
            }
    
            [Conditional("OFFLINE")]
            [Conditional("ONLINE")]
            public void GetInfoFromNet()
            {
                Console.WriteLine("单机功能版");
            }
        }
    
        class Program
        {
            static void Main(string[] args)
            {
                MyService service=new MyService();
                service.Testing();
                service.GetInfoFromNet();
            }
        }

    要实现两个不同的功能,需要在程序入口这个文件最开头定义:

    #define ONLINE

    //#define OFFLINE

    这条编译符号一定要在文件的最开头。同时,该定义只对本文件有效。如果要想定义全局编译符号,则必须在项目属性中定义。如图:

    如果想定义多个全局宏定义,则用逗号隔开,如“OFFLINE,ONLINE”。

    如果要发布所有功能,就输入条件编译符号#define ONLINE,代码运行如下:

    完整版功能
    单机版功能

    如果要发布离线版功能,就用#define OFFLINE。运行如下:

    单机版功能

    转自:《编写高质量代码改善C#程序的157个建议》陆敏技

  • 相关阅读:
    Spring,SpringMVC,MyBatis,Hibernate,Servlet的生命周期,jsp有哪些内置对象,Tomcat,Cookie和Session的作用以及区别,oracle,MYSQL等面试题总结
    webpack配置react--ts项目
    防抖(debounce)和节流(throttle)
    js~eventLoop 事件循环
    在Vue 项目中使用echarts
    JS
    ImmuableJS 简单入门用法
    Redux-小案例-加一操作
    Oberver.js
    react-jsx语法
  • 原文地址:https://www.cnblogs.com/farmer-y/p/8022246.html
Copyright © 2011-2022 走看看