gpt4 book ai didi

.net - 推荐参数顺序

转载 作者:行者123 更新时间:2023-12-01 11:58:11 24 4
gpt4 key购买 nike

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

我面临的难题是参数顺序。每个方法都要求您将 SqlConnection 或 SqlTransaction 传递给它(取决于该方法是否更新数据库)。当然,有些方法可以用不同的参数调用。例如:

Keyword.Load(string description, SqlTransaction transaction)

--或者--

Keyword.Load(string description, string tag, 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)

如您所见,它需要更多的重载才能使其正确,但对事务或连接的强调对我来说似乎更加清晰。

如果你是我,你会选择哪条路?是否有设计指南规定应如何处理此类场景?是否有太多重载需要处理?

最佳答案

直接来自框架设计指南:

Do be consistent in the ordering and naming of method parameters.

编辑:

如果您不想遵循指南,我会将重载分解为单独的方法,如下所示:

A()
A(int arg1)
A(int arg1, string arg2)
A(int arg1, string arg2)

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
)

关于.net - 推荐参数顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4783128/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com