c# - 在处理静态方法时将代码保持在同一级别

标签 c# java design-patterns oop single-responsibility-principle

这可能有点主观,但我想听听您对我目前情况的看法。我有一个将用于序列化/反序列化对象的类。

public class MyClass
{
    public static string ToXmlString( MyClass c ) { /*...*/ }
    public static MyClass FromXmlString( string xml ) { /*...*/ }
}

我只喜欢这种方法,因为它将两个功能保持在同一级别。但是,我的目标是避免使用静态方法(在可行的情况下)。我也觉得我可能违反了 SRP,但这个对象的主要目标是它可以从 xml 字符串序列化/反序列化。

对于在这种情况下使用静态方法有什么想法吗?我是否应该让 ToXmlString 成为非静态的,而让 FromXmlString 保持静态?我应该创建一个只处理 MyClass 序列化的新类吗?

编辑:

我在这里讨论的类是一个简单的传输对象。它用于从第三方工具保存/恢复值。

谢谢!

最佳答案

FWIW 我认为序列化是一个问题,应该与您类(class)的其他部分分开,尤其是如果您的类(class)是业务类型。

开发组件时的一般规则是确保它只解决少数问题,并将业务问题与技术问题分开。

如果以后您需要管理来自数据库或二进制格式的序列化怎么办?

您可能会以越来越多的技术方法(SaveToDB、LoadFromDB、ToBinaryStream、FromBinaryStream...)结束,这些方法会使您的类变得困惑并使其越来越难以维护,隐藏其主要目的(例如业务)。

关于c# - 在处理静态方法时将代码保持在同一级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3495330/

相关文章:

java - Smartsheet Java API 引起讨论

java - 从列表中删除第一项?

c# - entlib 6 记录器实例化错误

c# - DbContext的第三方实现,如何同时实现IdentityDbContext

c# - 如何让用户在 C# EF4.1 Code First 中动态指定数据库提供程序和连接详细信息?

java - 创建扩展抽象类的子类的实例 (Java)

c++ - 需要一些关于如何制作类(class)的反馈 "thread-safe"

c++ - C++中一些模块的API

c# - 如何使用具有静态属性的静态类返回扩展抽象类的具体类的新实例

c# - 没有将选定的下拉列表项返回给 Controller