美文网首页
软件架构设计培训心得

软件架构设计培训心得

作者: 特大萝卜 | 来源:发表于2016-06-06 22:51 被阅读152次

软件设计培训总结(一)

什么是软件设计

说不上来,反正目前我靠这个养家糊口。

为什么需要软件设计

“杀死一个程序员不需要子弹,只要变更三次需求。”
因此软件设计的目的就是让程序员活下去!

何时做设计

老师的答案:第一颗子弹

总结一句话就是: 变化驱动设计。讲真,
这种lazy-load的方式还是很适合我这种懒惰的程序员的。在变化到来之前,不需要考虑太多的"以后会不会xxx"这系列问题(除非对你所在的领域非常熟悉,已经有很多的经验可以借鉴和预判)。但是,当第一次变化到来的时候,就需要去分离变化——分离变化,并且在这一变化的方向上设计出“一劳永逸”的架构。

具体怎么做

消除重复!消除重复!消除重复!重复是万恶之源!
隐藏在各种设计模式背后的用意就是提高可重用性,反应在代码上就是减少重复代码

正交原则

  • 最小化重复
  • 分离不同的变化方向
  • 缩小依赖范围
  • 向着稳定的方向依赖

简单设计原则(重要性依次降低)

  • 通过所有测试(满足用户需求)
  • 尽可能消除重复
  • 尽可能清晰表达
  • 尽可能减少代码元素

举个例子

比如在我们实战演练的时候,Length与Volume对象需要能够“按照格式A输出到屏幕”。于是,我们“信手拈来”地增加了一个toString()接口,用来按照固定格式输出到屏幕。

变化总是来的太快——用户需求改了,要求能够“按照格式B输出到屏幕”。这时候我们在写一个toStringB()吗?那如果后续还有“C格式”、“D格式”、……?好吧,这样自己就会有一堆输出字符串的接口——其实他们都做同一件事情,只不多方式不同罢了。

于是,我们封装了行为“输出到屏幕”——提取出了toString()方法。为了满足用户对输出格式多样化的需求,我们提供了多个Formatter类——用户需要什么格式,自己new一个吧!

class Formatter
{
public:
    Formatter(){}
    ~Formatter(){}

    string format(int value);
};

class FormatterA : public Formatter
{
public:
    string format(int value)
    {
        return "out put formatter category A.";
    }
};

class FormatterB : public Formatter
{
    string format(int value)
    {
        return "out put formatter category B.";
    }
};


template <typename Type>
class Quality
{
private:
    int value;
    Type unit;
protected:
    inline int getValue() {return value;}
    inline Type getUnit() {return unit;}
public:
    Quality(int value, Type unit);
    virtual ~Quality();

    string toString(const Formatter & formatter) // 用户可以通过不同的formatter来定制输出的格式
    {
        return formatter.format(this->value);
    }
};

// 我们只需要提供Length和Volume的定义
typedef Quality<int> Length;
typedef Quality<int> Volume;

// 补充下用户的使用方法
Length l = Length(1, 9);
l.toString(FormatterA());
l.toString(FormatterB());

相关文章

  • 软件架构设计培训心得

    软件设计培训总结(一) 什么是软件设计 说不上来,反正目前我靠这个养家糊口。 为什么需要软件设计 “杀死一个程序员...

  • 14软件架构设计(系统设计)

    软件架构概述 从需求分析到软件设计之间的过渡过程称为软件架构。只要软件架构设计好了,整个软件就不会出现坍塌的错误,...

  • DEC培训Day-1:应用架构

    DEC-应用架构设计 更偏向于技术架构的设计。应用:应用软件的概念应用架构:应用的技术架构应用软件:按照不同领域、...

  • 微服务架构设计实践

    微服务架构设计实践 1 序言 最近,在软件架构设计领域,微服务非常火。 一提到软件开发、架构设计,如果不提微服务,...

  • 系统架构设计师学习笔记 第九章 软件架构设计

    第九章 软件架构设计 9.1 软件架构概述 9.1.1 软件架构的定义 定义1:软件或计算机系统的软件架构是该系统...

  • 架构的先决条件

    软件架构(software archivtecture)是软件设计的高层部分,是用于支撑更细节的设计的框架。架构也...

  • MVC开发模式&三层架构

    MVC:开发模式 三层架构:软件设计架构

  • 学习总结0606

    一、软件架构的概念 软件架构是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。 软件架构整体...

  • 软件架构:基础概念总结

    定义 软件架构是指:对于软件的各个方面做出的设计决定,包括行为上的和结构上的。 架构与设计的关系 架构是设计的一部...

  • 编程题外话

    概念 CPU,总线,内存 CPU处理器架构 软件架构模式 软件设计模式 软件系统架构 程序运行过程 进制转换 补码...

网友评论

      本文标题:软件架构设计培训心得

      本文链接:https://www.haomeiwen.com/subject/wwgrrttx.html