当前位置:  开发笔记 > 编程语言 > 正文

已发布和公共方法/属性之间有什么区别?

如何解决《已发布和公共方法/属性之间有什么区别?》经验,为你挑选了1个好方法。

根据Martin Fowler的说法"有些东西可以公开,但这并不意味着你已经发布了它." 这是否意味着这样的事情:

public interface IRollsRoyceEngine
{
    void Start();
    void Stop();
    String GenerateEngineReport();
}

public class RollsRoyceEngine : IRollsRoyceEngine
{
    public bool EngineHasStarted { get; internal set; }

    public bool EngineIsServiceable { get; internal set; }

    #region Implementation of IRollsRoyceEngine

    public void Start()
    {
        if (EngineCanBeStarted())
            EngineHasStarted = true;
        else
            throw new InvalidOperationException("Engine can not be started at this time!");
    }

    public void Stop()
    {
        if (EngineCanBeStopped())
            EngineHasStarted = false;
        else
            throw new InvalidOperationException("Engine can not be started at this time!");
    }

    public string GenerateEngineReport()
    {
        CheckEngineStatus();
        return EngineIsServiceable ? "Engine is fine for now" : "Hmm...there may be some problem with the engine";
    }

    #endregion

    #region Non published methods

    public bool EngineCanBeStarted()
    {
        return EngineIsServiceable ? true : false;
    }

    public bool EngineCanBeStopped()
    {
        return EngineIsServiceable ? true : false;
    }

    public void CheckEngineStatus()
    {
        EngineIsServiceable = true;
        //_EngineStatus = false;
    }

    #endregion

}

可以说,这个发布的接口是IRollsRoyceEngine而不是RollsRoyceEngine中的任何东西吗?

如果是这样,公共和已发布的方法之间的真正区别是什么?



1> Steve Jessop..:

我认为他意味着合同是王道 - 只是因为你班上的一种方法是公开的,没有权利让客户认为他们可以称之为,或者他们知道它的作用,或者它会在下一个版.API不是由源定义的,它们由合同定义,通常以文档的形式定义.

客户端不负责调用未记录的(未发布的)函数,而不是实现者负责隐藏不应调用的方法.

有些人可能会不同意这一点 - 通常是那些不信任文档的人,并且宁愿通过查看源代码来查看其实际工作情况,而不是作者声称它的作用,从而找出工作原理.他们可能有一个观点,尤其是在处理文档不足的代码时.但我认为这与福勒所说的相反,即功能应该正式定义,而不是通过检查特定的实现来推断.

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有