.net 推荐参数顺序
我正在开发一个遗留软件系统,我的任务是将一些旧的COM组件迁移到.NET3.5。COM组件最初托管在MTS中,然后托管在组件服务中。在.NET端口中,我们使用ADO.NET事务处理事务,因此方法签名会有所变化 我面临的困境是参数顺序。每个方法都需要向其传递SqlConnection或SqlTransaction(取决于该方法是否更新数据库)。当然,有些方法可以用不同的参数调用。例如:.net 推荐参数顺序,.net,parameters,coding-style,overloading,.net,Parameters,Coding Style,Overloading,我正在开发一个遗留软件系统,我的任务是将一些旧的COM组件迁移到.NET3.5。COM组件最初托管在MTS中,然后托管在组件服务中。在.NET端口中,我们使用ADO.NET事务处理事务,因此方法签名会有所变化 我面临的困境是参数顺序。每个方法都需要向其传递SqlConnection或SqlTransaction(取决于该方法是否更新数据库)。当然,有些方法可以用不同的参数调用。例如: Keyword.Load(string description, SqlTransaction transact
Keyword.Load(string description, SqlTransaction transaction)
--或--
现在,框架中提供多个重载的大多数方法如下所示:
A(int arg1)
A(int arg1, string arg2)
A(int arg1, string arg2, DateTime arg3)
值得注意的是,尽管重载,参数顺序是一致的。但是,我想强调的是,用户需要传入连接或事务。通常,这些是最后指定的参数。但在我看来,放置它们的最佳位置是参数0:
A(SqlTransaction transaction)
A(SqlTransaction transaction, int arg1)
不幸的是,这种情况在重载声明中出现,重载既不接受连接也不接受事务,而是为您创建一个:
// These overloads create a connection, open it, and start a new transaction.
A()
A(int arg1)
A(int arg1, string arg2)
A(int arg1, string arg2)
A(int arg1, string arg2, DateTime arg3)
// These overloads require that the transaction be passed in, so that the method
// can take part in it.
A(SqlTransaction transaction)
A(SqlTransaction transaction, int arg1)
A(SqlTransaction transaction, int arg1, string arg2)
A(SqlTransaction transaction, int arg1, string arg2, DateTime arg3)
正如您所看到的,它需要更多的重载才能使其正确,但对事务或连接的强调对我来说似乎更清楚
如果你是我,你会选择什么道路?是否有一个设计指南规定如何处理此类情况?是否要处理太多的重载?直接从框架设计指南: 方法参数的顺序和命名一定要一致 编辑: 如果您不想遵循指导原则,我会将重载分解为单独的方法,如下所示:
A()
A(int arg1)
A(int arg1, string arg2)
A(int arg1, string arg2)
及
特别是,我要说
Keyword.Load(string description)
Keyword.Load(string description, string tag)
及
这将要求将事务作为最后一个参数传递。就个人而言,主观的,在本例中,我也希望它首先被传递。这实际上不是一个坏的模型,但我认为我可能会更改名称以适应更强调事务的模型:关键字.LoadFromNewConnection(字符串描述)和关键字.Load(SqlConnection连接,字符串描述)。我的主要目标是强调,我们希望尽可能多地重用连接和事务,并且调用方必须明确说明他希望如何建立连接。
AWithTransaction(SqlTransaction transaction)
AWithTransaction(SqlTransaction transaction, int arg1)
AWithTransaction(SqlTransaction transaction, int arg1, string arg2)
AWithTransaction(
SqlTransaction transaction,
int arg1,
string arg2,
DateTime arg3
)
Keyword.Load(string description)
Keyword.Load(string description, string tag)
Keyword.LoadWithTransaction(SqlTransaction transaction, string description)
Keyword.LoadWithTransaction(
SqlTransaction transaction,
string description,
string tag
)