我有一个系统可以处理我工作的公司中多种类型的工人角色(大约 30 个)。它们都有共同的数据(例如个人数据)。我想提高效率的是为许多类型的工人重用方法代码。其中一些类是: Manager
,每个Director
类都Employee
必须检查其输入时间,而我使用另一个名为 的类来执行此操作Company
,因此我为该类提供了三种方法:
public class Company
{
public void CheckIn(Director Person)
{
}
public void CheckIn(Employee Person)
{
}
public void CheckIn(Manager Person)
{
}
}
根据进入公司的角色,整个建筑物的入口处会发生不同的事情。我希望我让自己明白了。
您可以使用继承类或接口
Persona
,其中您提到的所有类的所有公共成员都包含它所以你只有一种方法
CheckIn
:例如:
带接口
接口中的属性注意事项
和一堂课
无论哪种方式,您都需要在“孩子”中引用它们,在您的班级中,
Director
您必须拥有任何一个
无论您选择哪种方式,都会大大加快您的开发速度。
当然,您可以做的是使用接口。接口允许您为类建立规则(法律上它们必须具有的属性和方法)。下面是一个代码示例:
当你调用你的检查输入法时,你会这样做:
根据你说的
除了使用接口的选项之外,也许使用一些属性就足够了
Person
,例如Person.Rol
,除了有一种按角色检查的类型之外,还可以使用一些属性来为您提供类的角色,例如CheckingType
,将不同的角色分组为类似的行为。由于您没有指定 CheckIn 方法中的代码,因此我将尝试以最一般的方式回答:
首先,您应该尝试的第一件事是创建一个工作接口,其中包含必须对所有人通用的字段和方法。例如:
然后每种类型的worker都可以实现这些字段和方法
以这种方式假设例如我们有以下类
您的方法可以简化为:
但这并不总是可能的。
如果由于某种原因您无法修改类以使它们无法实现相同的接口怎么办。即使这些类没有相同的字段怎么办?
这可以通过适配器模式解决
interface
此模式用于更改您需要使其适应特定 API 的类的“接口”(一般使用的术语,与C# 不同)例如,我们有以下类:
在这种情况下,我们可以创建一个标准化接口的适配器
然后我们可以为每个角色创建一个子类型
每个实现都可以有自己的逻辑
那么班级
Company
将是这样的通过这种方式,您可以使 CheckIn 方法始终依赖于单个类或接口,而不是针对每种类型的员工都有一个。
De todas maneras estas solo son algunas ideas, tu caso puede variar considerablemtente pero la idea es la misma, estandarizar la interfaz para poderla hacer única para todo tipo de clases.
为了尊重这些概念
SOLID
,您不应根据您必须验证的人使用任何 if 或 swith 应用逻辑。这就是为什么我想摆出这样的姿势
正如您将看到的继承,您可以使类实现其具体验证。你会这样调用它吗
在这种情况下,使用 a
virtual
来定义基本实现,因此您只需要在必要时覆盖,但如果您不想,您可以定义一个方法,如abstract
我想添加我的答案,尽管我建议(像其他人一样)在对象上使用接口,但是另一个选项如下:
问候,这里你提到了“是”
También se puede utilizar una definición de una clase con parámetros genéricos