C# 我应该把我的第一种方法放在哪里
我需要添加一个方法来计算工人工资和他的上级工资的加权和。我想要这样的东西:C# 我应该把我的第一种方法放在哪里,c#,oop,methods,C#,Oop,Methods,我需要添加一个方法来计算工人工资和他的上级工资的加权和。我想要这样的东西: class CompanyFinanse { public decimal WeightedSumOfWorkerSalaryAndSuperior(Worker WorkerA, Worker Superior) { return WorkerA.Salary + Superior.Salary * 2; } } 这是一个好的设计还是我应该把这个方法放在其他地
class CompanyFinanse
{
public decimal WeightedSumOfWorkerSalaryAndSuperior(Worker WorkerA, Worker Superior)
{
return WorkerA.Salary + Superior.Salary * 2;
}
}
这是一个好的设计还是我应该把这个方法放在其他地方?我刚刚开始设计这个项目,并考虑一种很好的、面向对象的方法来组织类中的方法。所以我想从我脑海中的OOP开始。需要最佳实践 要使您的设计成为面向对象的,您应该从考虑整个应用程序的用途开始。如果应用程序中只有一种方法(加权和),那么就没有太多的设计需要继续 如果这是一个财务应用程序,也许您可以有一个包含工人工资和一些实用函数的Salary类 对于您指出的方法,如果Worker类有对其上级的引用,则可以将此方法作为Worker类的一部分
如果没有关于应用程序用途的更多信息,就很难提供良好的指导。我会将其放在worker类中,或者在finance库中使用静态函数。我不认为金融对象真的有意义,我认为它更多的是一套业务规则,而不是任何东西,所以它是静态的
public class Worker {
public Worker Superior {get;set;}
public readonly decimal WeightedSalary {
get {
return (Superior.Salary * 2) + (this.Salary)
}
}
public decimal Salary {get;set;}
}
或
因此,在不了解更多您的领域的情况下,可能不可能给您一个关于“最佳实践”的完整答案,但我可以告诉您,您可能会在这么早就考虑实施细节,从而将自己置于灾难之中 如果你像我一样,那么你被教导好的OOD/OOP是非常详细的,并且涉及到。直到我职业生涯的后期,我才发现这正是许多项目在以后的道路上变得异常无法维护的原因。对项目可能如何工作进行了假设,而不是允许设计从实际使用的代码中自然产生 简单地说:你需要做/(行为/测试驱动的开发)
- 来自加州保利大学
- 在敏捷建模网站上,以及
- ,其中讨论了该实践及其在多种语言中的使用
理解哪个类应该“拥有”一个特定的行为(和/或哪个类应该在实现一个给定的用例时进行协作),通常是一种自上而下的讨论,由系统为用户所做的总体设计来驱动。很容易发现您的代码是否需要改进。代码片段中有一种代码味道。你应该解决这个问题 很好,您对该方法有一个非常声明性的名称。但是它太长了。听起来,如果您将该方法保留在这个
Finanse
类中,那么不可避免地必须在方法名称中使用所有这些单词来理解该方法的意图
它基本上意味着这个方法可能不属于这个类
解决这种代码气味的一种方法是,如果我们在另一个类上有方法,那么您是否可以得到一个较短的方法名。我看到你们有工人
和工资
课程
假设这些是剩下的唯一类,并且您不想增加更多类,我会将此设置为Salary
<代码>薪资知道如何在另一个薪资(本例中为上级薪资)作为输入的情况下计算加权薪资。现在,方法名称不需要超过两个单词
@Shawn的答案是解决这种代码气味的一种变体。(我想您可以称之为“长方法名”代码气味)谢谢您的回答。我只是在想这个。所以困扰我的是如何决定设计。这个方法肯定会在这个系统中的几个地方使用,因为它将作为一个公司财务系统工作。只需在您拥有的任何一个类中编写函数,然后将其移动,如果很明显它更适合其他地方。我会选择你的答案中的第一个选项。有人编辑了此选项以在方法声明中添加静态,但我不确定是否需要它,因为它在类中声明。。。人力资源管理
public static class Finance {
public static decimal WeightedSumOfWorkerSalaryAndSuperior(Worker WorkerA, Worker Superior) {
return WorkerA.Salary + Superior.Salary * 2; }
}