首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调试类责任、可访问性

调试类责任、可访问性
EN

Software Engineering用户
提问于 2017-06-12 13:08:06
回答 1查看 55关注 0票数 0

因此,我正在编写一个群集系统(http://www.red3d.com/cwr/boids/)。

每个boid计算它的向量,我想用一个帮助器类来绘制这些向量,以便进行调试。

谁应该实现DrawAllLines函数?

请注意,我使用的是c#,所以没有像C++那样的朋友功能。

请注意,DrawAllLines在现实中要大得多,这就是为什么我想将代码移到另一个类。

尝试#1:

Boid

代码语言:javascript
复制
public class Boid
{
    private Vector3 cohesion;
    private Vector3 separation;
    private Vector3 aligment;

    public void DrawLines()
    {
        DrawLine(cohesion);
        DrawLine(separation);
        DrawLine(alignment);
    }
}

调试

代码语言:javascript
复制
public class Debug{
    public DrawAllLines()
    {
        foreach(Boid b in allboids)
        {
            b.DrawLines()
        }
    }
}

尝试#2

Boid

代码语言:javascript
复制
public class Boid
{
    public Vector3 cohesion;
    public Vector3 separation;
    public Vector3 aligment;
}

调试

代码语言:javascript
复制
public class Debug()
{
    public void DrawAllLines()
    {
            foreach(Boid b in allboids)
            {
                DrawLine(b.cohesion);
                DrawLine(b.separation);
                DrawLine(b.alignment);
            }
    }
}
EN

回答 1

Software Engineering用户

回答已采纳

发布于 2017-06-12 19:18:15

有几件相关的事情我们想拆散,

  1. 信息隐藏。
  2. 访问限制。
  3. 责任。

在我们的第一种情况中,我们让Boid通过访问限制(通过使这些字段是私有的)隐藏它的信息,这导致了一个问题,即任何要求该信息的责任都必须由类本身承担。这导致代码紧密耦合功能,很难测试、维护和扩展。

我们的第二次尝试放弃了访问限制和信息隐藏,以便允许另一个类承担绘制Boid的责任。

在这种情况下,我想说第二次尝试要比第一次尝试要好,但是使其更好的是使Boid不可变,或者至少使这些属性只读。

对于我们设计的这三个方面,没有简单的公式,但是我们可以拿出一些简单的准则

  1. 不要隐藏关于核心域的信息。
  2. 如果公开会让您的设计受到损害,请隐藏信息。
  3. 保持访问限制简单。如果您发现自己希望使用朋友/内部/包级访问修饰符,那么设计可能有问题。
  4. 信息隐藏允许对象保持对其责任的明确所有权。
  5. 相反,信息共享允许其他对象承担责任。

我发现遵循这些规则可以简化设计决策,从而促进清洁设计。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/350715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档