1

请看以下问题:DataAccess 项目中类的命名约定是什么?

JDK 谈到使用命名空间来分隔数据逻辑层和业务逻辑层,而不是使用匈牙利符号来命名接口,例如 IPersonDAL 用于数据访问层。我在下面的代码中遵循了这个回答者的建议:

Imports com.app.BusinessLogicLayer.Interfaces
Imports com.app.DataLogicLayer.Interfaces
Namespace BusinessLogicLayer

        Public Class Order
            Implements com.app.BusinessLogicLayer.Interfaces.IOrder
            Public Sub Insert()
                Dim IOrder As com.app.DataLogicLayer.Interfaces.IOrder = New com.app.DataLogicLayer.Order
            End Sub
        End Class
    End Namespace

    Namespace DataLogicLayer
        Public Class Order
            Public Sub Insert()

            End Sub
        End Class
    End Namespace

    Namespace BusinessLogicLayer.Interfaces
        Public Interface IOrder

        End Interface
    End Namespace

    Namespace DataLogicLayer.Interfaces
        Public Interface IOrder

        End Interface
    End Namespace

业务逻辑层中的类,例如订单实现接口(来自业务逻辑层的 IOrder)和使用接口(来自数据逻辑层的 IOrder),即表示层与业务逻辑层通信,业务逻辑层通过接口与数据逻辑层通信. 请注意,由于这个原因;接口必须完全符合命名空间。为此原因; 使用匈牙利符号命名接口不是更好,例如 IPersonBLL 和 IPersonDAL 还是我遗漏了什么?

4

2 回答 2

2

嗯,这是一个主观的话题,但这里......

首先,避免使用 DAL 之类的缩写。代码分析对首字母缩略词大喊大叫;你应该把它写出来。根据我的经验,这是明智的建议。打开充满缩写的古老代码会导致很多不必要的 WTF 时刻(双关语)。

即使拼写出来,当您的 BusinessLogic 文件夹中有 50 个类时,如下所示:

Company.Product.BusinessLogic
  人员实体
  订单实体
  物料实体
  员工实体
  客户实体
  等

我的直觉告诉我是时候重构了。我觉得最好将实体标签移动到命名空间,所以你有这个:

Company.Product.BusinessLogic.Entity
  人
  订单
  材料
  员工
  客户
  等

同样的事情也适用于接口。

这也使得重构更容易。如果我想开始调用我的实体“BusinessObjects”,我只需要重命名命名空间,而不是类名和文件名。

限定类名可能很痛苦,但通常只需要指定父命名空间,而不是完全限定它们。Resharper -> 清理代码在这里创造了奇迹。

总之,我不会为了让引用更容易处理而将匈牙利符号添加到我的接口/类名称中。


更新:示例

数据访问层

Namespace Company.Product.DataAccess.Adapter
    Public Class Product
    End Class
End Namespace


业务层

Imports Company.Product.DataAccess

Namespace Company.Product.BusinessLogic.Entity
    Public Class Product
        Dim adapter As New Adapter.Product()
    End Class
End Namespace


用户界面(理想情况下,您的 UI 应该只与业务层交互,而不是直接与数据层交互):

Imports Company.Product.BusinessLogic

Namespace Company.Product.UserInterface.Webpage
    Public Class Product
        Dim productEntity As New Entity.Product()
    End Class
End Namespace
于 2013-03-22T03:29:05.750 回答
1

请注意,由于这个原因;接口必须完全符合命名空间。为此原因; 使用匈牙利符号命名接口不是更好,例如 IPersonBLL 和 IPersonDAL 还是我遗漏了什么?

我明白你在说什么,但我不明白为什么完全限定名称是不好的,或者为什么使用“匈牙利”表示法命名接口会“更好”。(我这样说是作为 Simonyi 的应用程序匈牙利语的忠实粉丝。)

请记住,无论类/接口的名称和位置如何,编译器都会生成相同的目标代码。明显的嵌套级别不会将您的代码“减慢”到任何可察觉的程度。

如果输入名称确实让您感到困扰(而 Intellisense 并不能安慰您),您始终可以使用带有 using 指令的命名空间别名之类的东西。但我会小心过度使用这些——我认为这会使代码更难阅读。

于 2013-03-22T03:49:52.430 回答