Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 推荐参数顺序_.net_Parameters_Coding Style_Overloading - Fatal编程技术网

.net 推荐参数顺序

.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

我正在开发一个遗留软件系统,我的任务是将一些旧的COM组件迁移到.NET3.5。COM组件最初托管在MTS中,然后托管在组件服务中。在.NET端口中,我们使用ADO.NET事务处理事务,因此方法签名会有所变化

我面临的困境是参数顺序。每个方法都需要向其传递SqlConnection或SqlTransaction(取决于该方法是否更新数据库)。当然,有些方法可以用不同的参数调用。例如:

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
)