none
WCF 接口重载的问题(转别人的贴) RRS feed

  • 问题

  • 我想对一个压缩的功能进行包装,为了实现压缩不同格式的扩展。我定义了接口。如下:

    public interface ICompression
    {
    bool CompressFiles(string zipFileName, string[] fileNames);
    bool CompressFiles(string compressFileName, string comment, string[] fileNames);

    /// <summary>
    /// 压缩文件
    /// </summary>
    /// <param name="zipFileName">压缩文件名</param>
    /// /// <param name="password">密码</param>
    /// <param name="comment">注释</param>
    /// <param name="fileNames">压缩文件目录数组</param>
    /// <returns></returns>
    bool CompressFiles(string compressFileName, string password, string comment, string[] fileNames);

    bool DecompressFiles(string compressFileName, string fileDir);
    /// <summary>
    /// 解压缩文件
    /// </summary>
    /// <param name="compressFileName">压缩 文件名</param>
    /// <param name="password">密码</param>
    /// <param name="fileDir">解压目录</param>
    /// <returns></returns>
    bool DecompressFiles(string compressFileName, string password, string fileDir);
    }

    但是定义后发现这样定义参数使用的灵活性太差了,要实现的功能还远远不够。如何避免这样的设计?有什么好的解决方案。
    2011年5月31日 5:53

答案

  • 我觉得可以把参数封装称一个对象。这样应该会比较灵活,可以根据需要增加和删除一写非必需的信息,通过这些信息来灵活的对功能进行扩展。

    比如这样。

            [DataContract]
            public class Request
            {
                [DataMember(IsRequired = true)]
                public string Test2 { get; set; }

                [DataMember(IsRequired = true)]
                public string Test1 { get; set; }

                [DataMember]
                public string Test3 { get; set; }
            }

    bool CompressFiles(Request request);

    2011年5月31日 7:46

全部回复

  • 在你的接口中再增加一个参数,表示压缩格式。
    2011年5月31日 6:20
  • 我觉得可以把参数封装称一个对象。这样应该会比较灵活,可以根据需要增加和删除一写非必需的信息,通过这些信息来灵活的对功能进行扩展。

    比如这样。

            [DataContract]
            public class Request
            {
                [DataMember(IsRequired = true)]
                public string Test2 { get; set; }

                [DataMember(IsRequired = true)]
                public string Test1 { get; set; }

                [DataMember]
                public string Test3 { get; set; }
            }

    bool CompressFiles(Request request);

    2011年5月31日 7:46