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个建议》陆敏技

  • 相关阅读:
    jsp <img src="“> src 相对路径的问题
    记一次Intellij-IDEA配置JDK1.8,支持Lambda新特性
    centOS6.5 查看 启动 关闭防火墙
    java设计模式之--工厂方法模式
    BlockingQueue之---ArrayBlockingQueue
    两个线程,一个为123456,一个为ABCDEF、交替打印出1A2B3C...
    JUC之---超好用的阻塞锁
    JUC之---读写锁
    java设计模式之--代理模式
    java设计模式之--线程安全的单例模式
  • 原文地址:https://www.cnblogs.com/farmer-y/p/8022246.html
Copyright © 2011-2022 走看看