【问题标题】:Class design with SOLID Principle using C#使用 C# 使用 SOLID 原理进行类设计
【发布时间】:2026-02-13 08:30:01
【问题描述】:

每个电梯都有一组状态。

• 维护:电梯不对外部信号作出反应(仅对自身信号作出反应)。

• 站立:电梯固定在楼层上。如果它接到电话。电梯就在那个楼层,门打开了。如果它在另一个楼层,它会朝那个方向移动。

• 向上:电梯向上移动。每次到达楼层时,它都会检查是否需要停止。如果是这样,它会停下来打开门。它等待一定的时间并关闭门(除非有人正在通过它们。然后它从请求列表中删除楼层并检查是否有另一个请求。如果有,电梯再次开始移动。如果没有,它进入国家立场。

• 向下:类似向上但方向相反

注意:有些电梯不从底部/第一层特别是开始。在天空刮板的情况下。 min_floor 和 max_floor 是 Elevator 的两个附加属性。

我的演示设计:

public abstract class Elevator
{
    protected bool[] floorReady;
    protected int CurrentFloor = 1; 
    protected int topfloor; 
    protected ElevatorStatus Status = ElevatorStatus.STOPPED; //ElevatorStatus is enum

    protected virtual void Stop(int floor){}
    protected virtual void Descend(int floor)  {}
    protected virtual void Ascend(int floor) {}
    protected virtual void StayPut () {}
    protected virtual void FloorPress (int floor){}

}

interface ILogger
{
    void RegisterLog(string Message)
}

public FileLogger : ILogger
{
    void RegisterLog(string Message)
    {
        //Custom Code
    }
}
public class MyElevator : Elevator
{
    // All method overrride for base
}

//Client class
class program
{
    public static void main()
    {
     //DI for calling Looging

    }
}

有人可以帮我设计满足所有 SOLID 原则的课程吗..

提前致谢...我想使用 SOLID 原理设计一个电梯模拟器。

【问题讨论】:

  • 欢迎您!抱歉,我们不是来为您编写代码的。为什么不给自己泡一杯好茶呢?阅读 SOLID;进行一些实验,看看结果如何。如果您遇到特定问题,请返回此处并发布相关信息。祝你好运! :)
  • 让我将我的尝试上传到 GitHub 并在此处分享链接...听起来不错?
  • 很高兴你有代码可以展示。您可以通过editing您的问题在此处发布最低金额吗?窥视者通常不会看外国网站或太长的代码。谢谢朋友
  • 我的问题是在我的设计电梯类有很多责任。它是紫罗兰 SRP 吗?

标签: c# design-patterns solid-principles


【解决方案1】:

看看state pattern

通过使用它,您可以移动将电梯移动到每个特定状态的业务规则。因此,您无需使用 Enum,而是让每个状态确定下一步要做什么(例如用于下一个操作的状态)。

它还允许您添加新功能(通过添加更多状态)而无需修改电梯类(从 SOLID 的角度来看这很重要)。

【讨论】: