品味编程~底层开发人员应该这样设计一个字体类

简介:

品味编程,不是一味的根据书本上的知识讲,而是在实践开发过程中总结出来的,比较有感悟的东西,对于一个问题,可能有多种方法,但无论你使用哪种方式,请记住,一定要用代码的扩展性,可读性及健壮性上考虑,你写的代码是否合理,这需要你自己用心去体会,用心去设计,在代码设计上,请千万不要模棱两可!

就像下面的例子,都是设计一个Font类,可两种结果却完全不同

例子1:

class Font
 {
            /// <summary>
            /// 大小
            /// </summary>
            public int Size { get; set; }
            /// <summary>
            /// 字体大小单位
            /// </summary>
            public string Unit{get;set;}
            /// <summary>
            /// 字体名称
            /// </summary>
            public string Name { get; set; }
            /// <summary>
            /// 样式
            /// </summary>
            public string Style { get; set; }
 }

例子2:比较注重代码可读性,扩展性及合理性,虽然代码长度增加了,但并不啰嗦,对于上层的开发人员来说,是友好的。

        /// <summary>
        /// 字体样式枚举
        /// </summary>
        [Flags]
        enum FontStyle
        {
            Bold = 1,
            Italic = 2,
            Regular = 0,
            Strikeout = 8,
            Underline = 4
        }

        /// <summary>
        /// 单位
        /// </summary>
        enum Unit
        {
            Pixed,
            Point
        }
        /// <summary>
        /// 字体大小
        /// </summary>
        struct FontSize
        {
            public FontSize(int size, Unit unit)
                : this()
            {
                Size = size;
                Unit = unit;
            }
            /// <summary>
            /// 大小
            /// </summary>
            public int Size { get; set; }
            /// <summary>
            /// 单位
            /// </summary>
            public Unit Unit { get; set; }
        }
        /// <summary>
        /// 字体类
        /// </summary>
        class Font
        {
            /// <summary>
            /// 大小
            /// </summary>
            public FontSize Size { get; set; }
            /// <summary>
            /// 字体名称
            /// </summary>
            public string Name { get; set; }
            /// <summary>
            /// 样式
            /// </summary>
            public FontStyle Style { get; set; }
        }

提供一下输出字体样式的方法

        /// <summary>
        /// 根据样式枚举值,得到它所包括的样式名称
        /// </summary>
        /// <param name="fontStyle"></param>
        /// <returns></returns>
        static IEnumerable<string> GetFontStyle(FontStyle fontStyle)
        {

            if ((fontStyle & FontStyle.Bold) == FontStyle.Bold)
                yield return "粗体";
            if ((fontStyle & FontStyle.Italic) == FontStyle.Italic)
                yield return "协体";

            if ((fontStyle & FontStyle.Strikeout) == FontStyle.Strikeout)
                yield return "删除线";

            if ((fontStyle & FontStyle.Underline) == FontStyle.Underline)
                yield return "下画线";

            if (fontStyle == FontStyle.Regular)
                yield return "正常";
        }

OK,进行测试一下

           Font font = new Font
            {
                Name = "宋体",
                Size = new FontSize(12, Unit.Pixed),
                Style = FontStyle.Bold | FontStyle.Italic
            };

            Console.WriteLine("字体名称:{0}", font.Name);
            Console.WriteLine("字体大小和单位:{0} {1}", font.Size.Size, font.Size.Unit);
            Console.Write("字体样式:");
            GetFontStyle(font.Style).ToList().ForEach(i => Console.Write(i));

            Console.ReadKey();

结果如图:

事实上,从例子2中,我们可以看到很多东西,它用到了类,结构,枚举,迭代等等,其中我们看到了FontStyle这个枚举它被标识了Flags特性,这说时,它可以支持位运算,本例中,提供了一个方法,它以迭代的方式返回位运算的结果集,这是一个亮点,我们通过这个方法,可以扩展到其它枚举类型如,用户权限设计(查看,删除,添加,更新),文件属性设计(只读,归档,隐藏),对于底层开发人员来说,需要将这些类型对应的方法进行开发,这样的设计对于表层开发人员是很友好的!

本文转自博客园张占岭(仓储大叔)的博客,原文链接:品味编程~底层开发人员应该这样设计一个字体类,如需转载请自行联系原博主。

目录
相关文章
|
5月前
|
敏捷开发 前端开发 开发者
想要成为软件开发中的王者,需要明白的 21 条准则
想要成为软件开发中的王者,需要明白的 21 条准则
|
5月前
|
Java
编程中最难的就是命名?这几招教你快速上手(4)
编程中最难的就是命名?这几招教你快速上手
38 0
编程中最难的就是命名?这几招教你快速上手(4)
|
30天前
|
存储 测试技术 数据处理
【软件设计师备考 专题 】定义软件需求的方法:结构化分析与面向对象分析
【软件设计师备考 专题 】定义软件需求的方法:结构化分析与面向对象分析
69 0
|
30天前
|
编解码 缓存 数据库
【软件设计师备考 专题 】编写内部设计文档:屏幕设计和数据库设计
【软件设计师备考 专题 】编写内部设计文档:屏幕设计和数据库设计
62 0
|
30天前
|
存储 安全 算法
【软件设计师备考 专题 】软件设计的艺术:分析与集成、逐步求精、抽象、信息隐蔽
【软件设计师备考 专题 】软件设计的艺术:分析与集成、逐步求精、抽象、信息隐蔽
56 0
|
1月前
|
算法 程序员 UED
探索编程之道:从功能实现到艺术创造
【2月更文挑战第18天】 在数字世界的构建中,编程已不仅仅是逻辑与算法的堆砌,它正逐步演变成一种创造性表达的手段。本文将探讨编程从基础的功能实现向高级的艺术创造的转变过程,分析编程者如何通过技术深入、创新思维和持续实践,提升其技艺至艺术境界。我们将审视几个关键要素——技术的深度理解、设计的美学融入以及代码的工艺精神,并讨论它们如何共同作用于编程实践中,以培养出能够编织数字世界之美的编程艺术家。
|
4月前
|
弹性计算 数据可视化 程序员
码住!程序员高效工作的10个方法
作为一名程序员,高效工作是我们必须要具备的能力。以下是一些程序员高效工作的10个方法,希望对大家有所帮助。
|
5月前
|
Java 程序员 编译器
编程中最难的就是命名?这几招教你快速上手(1)
编程中最难的就是命名?这几招教你快速上手(1)
35 0
编程中最难的就是命名?这几招教你快速上手(1)
|
5月前
编程中最难的就是命名?这几招教你快速上手(2)
编程中最难的就是命名?这几招教你快速上手
22 0
编程中最难的就是命名?这几招教你快速上手(2)
|
5月前
|
关系型数据库
编程中最难的就是命名?这几招教你快速上手(3)
编程中最难的就是命名?这几招教你快速上手
27 0