更改参数 - 谁负责?

时间:2016-08-12 06:01:02

标签: c# entity-framework email responsibility

我有一张桌子可以被其他应用程序填充。此表包含名为IsMailSent的属性。

EF根据数据库数据构建类型为Request的对象。

对象看起来像这样:

public class Request {
    int SomeInt;
    bool IsMailSent;
    SomeObject SomeObject;
}

现在我想创建一个服务,它将使用IsMailSent == false加载所有条目并将此邮件发送给收件人。

我目前的代码如下: 一个名为MailMessageService的类获得了Start()Stop()方法。 Start方法如下所示:

public void Start(int delay) {
        tokenSource = new CancellationTokenSource();
        T = new Task(() => {
            MailService ms = new MailService(Res.ServerAddress, int.Parse(Res.ServerPort));
            while (true) {
                var messages = GetMailMessages(_context.Requests.Where(o => !o.IsMailSent));
                ms.Send(messages);
                Thread.Sleep(delay);
            }
        }, tokenSource.Token);
    }

方法GetMailMessages收到Request的集合,并构建MailMessages的集合。目前,我创建了一个继承自MailMessage的类,并包含对相应Request对象的引用。背后的想法是MailService(负责发送邮件)应将IsMailSent属性设置为true

  

因此Send()方法应设置IsMailSent = true

但这是最好的方法吗?据我了解SOLID原则,MailService不应负责设置此属性(因为它负责发送邮件) - 或者我错了?

1 个答案:

答案 0 :(得分:2)

您可以添加一种方法,将Request设置为Request类。因此,IsMailSent类最终会决定是否将true设置为Request。这样设置代码仍然在public class Request { // Property public bool IsMailSent { get; private set; } public void MailSent() { // TODO check some conditions if (...) { ... } // If everything is correct set the property IsMailSent = true; } } 类中,仍然可以影响集合。

E.g。

MailService.Send(...)

MailSent中调用[['title'], 'required','on'=>'create'], 方法。