用C#命名一个类?MSDN推荐的Noun

本文关键字:MSDN Noun 一个 | 更新日期: 2023-09-27 18:22:12

下面的类定义了一个模板,用于将订单发票打印到公司1。

类似地,也有单独的类定义用于将订单发票打印到各个公司的模板。

我在这里、这里、这里和这里阅读了关于SO的问题,他们强调了这一点:

Use a noun or noun phrase to name a class

但是,例如

PrintTemplateClient1(它是一个动词)对我来说似乎很好,而不是在这里使用名词。

有什么想法吗?

如果这个问题不属于这里,请告诉我,这样我就可以转到相关论坛了。

用C#命名一个类?MSDN推荐的Noun

我怀疑"print"这个词在这里混淆了东西。例如,如果它是PdfTemplateClient1,您可能不会认为它是一个问题。然而,我会尝试将名词放在结尾-我会使用Client1PrintTemplate,与Client2PrintTemplate一起使用。类的共同部分通常位于名称的末尾,而不是开头(例如TextReaderStreamReaderStringReader)。

也就是说,我首先也会尽量避免为不同的公司使用不同的代码。。。如果可能的话,这听起来像是应该用数据处理的事情——你可能想要不同的模板渲染器来处理不同的输出格式,但我会尽量避免它们对不同的公司不同。

您已经在使用一个名词:PrintTemplate。"打印模板"就是一个东西。"打印"一词也是一个动词,这一事实并不能改变"打印模板"是一个名词的事实。

I recommend changing the way you are defining your classes

    public interface IClientTemplate {
           GetTemplate(int templateTypeID, int clientID);
    }

    public class ClientTemplate: IClientTemplate {
        public string GetTemplate(.. get template as xml.. ) { }
    }

    public interface IPrintService {
              ClientInvoice(int clientID);
              ClientMemo(int clientID);
   }

public class PrintService: IPrintService {
        public ClientInvoice(int clientID) {
                 var template = new ClientTemplate ().GetTemplate(2, clientID);
                 .... and print her... 
            }
   }

通过这种方法,您将能够测试项目。此外,还有一个模块化。

作为一条常见规则,如果一个类名读起来是英文的,那么它的目的就更好了。名称应以代表类的英语子短语开头,以代表类抽象类别的子短语结尾。

在您的情况下,PrintTemplateClient在英文中并不是命名'公司一客户端打印模板'。

它可能是CompanyOneClientPrintingTemplate,因为存在其他公司的模板,并且它们派生自公共基类:类CompanyOneClientPrintingTemplate:ClientPrintingTemplate{}类CompanyTwoClientPrintingTemplate:ClientPrintingTemplate{}

使用speach中反映课堂目的的任何语法部分都是完全可以的。

例如,如果一个类表示命令,那么在基于消息传递的系统中,它应该以动词开头,以单词command结尾。(参见Greg Young的CQRS文件)

例如:

MakeClientReserveCommand-一个类,表示一个命令,如果由系统执行,该命令将导致为客户端进行预订的操作。

一个对应的类表示作为命令结果发生的事件,应该是过去时的语句:

ClientReserve已创建ClientReserveRejected

正如你所看到的,这些班级的名字遵循着规定的一般规则——它们都是用普通英语阅读的。

一般来说,推荐的方法很中肯,如果你想不出命名类的方法,试着把类看作一个服务,并以此命名,例如:

ClientTemplateService,模板打印机服务

等等。。。