【问题标题】:Implementation of Open-Closed Principle with frequent changes频繁变化的开闭原则的实现
【发布时间】:2020-07-31 18:51:43
【问题描述】:

我有一个系统发送电子邮件的要求。目前系统通过电子邮件发送用户的名字,并且它正在生产中并且工作正常。

现在我的客户要求在电子邮件中添加姓氏,所以我扩展了 send(User userinfo) 方法,这也可以正常工作。

现在客户再次要求在电子邮件中添加电子邮件,稍后客户再次要求在电子邮件中添加手机等更多用户信息。

当客户频繁要求对同一功能进行更改时,如何使用可靠原则的开闭原则来管理这个问题? 代码

` class User
    {
        public int userId { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Email { get; set; }
        public string Mobile { get; set; }
    }

    interface Email
    {
        void send(User userInfo);
    }

    class UserEmail : Email
    {
        public void send(User userInfo)
        {
            // Sends users firstname
            //Email Send code 
        }
    }

    class NewUserEmail : Email
    {
        public void send(User userInfo)
        {
            // Sends users Lirstname + Lastname
            //Email Send code 
        }
    }
`

【问题讨论】:

  • 当客户要求更改电子邮件功能时,旧功能应该可以工作还是旧功能已过时?
  • 发送电子邮件是主要要求,邮件模板和占位符内的动态内容是一个单独的问题。检查您的设计。如果您有“获取模板/填写模板(字典)/发送邮件”之类的设计,您只需更改配置,或者客户只需从后台添加姓氏
  • @ChetanRanpariya 客户想要废弃该功能。
  • @All,这是一道面试题。

标签: c# solid-principles open-closed-principle


【解决方案1】:

内容创建不必由 send 方法负责。它可以像发送任何传递给它的内容一样。因此,您可以使用 IEMailContent 接口来代替 Email 接口。该接口的实现应处理邮件内容的准备。 这可以随着内容需求的变化而扩展。开放扩展。

Email 的 send 方法应以 IEMailContent 作为参数。那么当内容需求改变时它就不需要改变。关闭修改。

send 方法可以有其他参数,如主题、邮件 ID 列表、抄送邮件 ID 列表、密件抄送 ID 列表以及默认值。那么如果这些参数有任何需求变化,Email类就不需要修改了。

【讨论】:

  • 嗨 Chandru,我明白了,现在让我们更改语句,如果客户想在今天之前在 Product 表中添加新字段,一周后另一个字段,一周后另一个字段,依此类推.那么如何管理这个数据库结构和代码。
  • 这个问题更多的是关于需求分析和数据设计:这个链接可能会帮助link
猜你喜欢
  • 2021-11-06
  • 2021-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-01
  • 1970-01-01
  • 2018-06-18
相关资源
最近更新 更多