【问题标题】:What's best practice in this situation?在这种情况下,最佳做法是什么?
【发布时间】:2011-11-03 15:44:52
【问题描述】:

我刚刚写了一个小的 asp.net 网页,通过绑定到转发器来显示对象集合,这时我想到了这一点。

基本上我创建的类,我们称之为'Test',有一个整数数据类型的价格属性(忽略使用这种类型的限制,我只是以它为例)。但是我想格式化这个属性,以便它显示货币和正确的小数位等。

最好的做法是在类中有一个函数来返回对象的格式化字符串,还是在我的 Web 表单的后端有一个函数来操作对象并返回格式化字符串会更好?

我之前听说一个类应该包含它的所有相关功能,但我也听说应该将演示文稿保存在我的 N 层应用程序的“演示层”中。

在我的情况下,最好的方法是什么? (如果我解释得不够清楚,我深表歉意!)

谢谢!

【问题讨论】:

  • 这应该是一个辅助方法。由于您所说的情况是针对一种众所周知的格式,我将创建一个帮助类来保存这些常用方法,并使用该帮助类的方法来获取格式化的字符串。辅助方法的输入值应直接从数据实例中提供。如果您将这样的格式化方法添加到数据类中,那么您将采取步骤#1 来污染数据类 - 沿着这条路,您会很想为其他数据成员添加更多这样的格式化方法。将toCurrency 等放在外面。只是我的想法!

标签: asp.net oop


【解决方案1】:

在我看来,从 OO 的角度来看,这两个选项都是有效的。

  • 由于值 价格(恰好具有错误的数据类型),因此将格式放入数据类是有意义的。这不是特定于 Web 界面的东西,如果您开发不同类型的用户界面,您很可能会再次需要这种格式。

  • 另一方面,这是一个表示问题,因此将其放入表示层也是有意义的。

【讨论】:

  • 我想这就是我变得如此困惑的原因,哈!
【解决方案2】:

对于一般的 OOP 内容,对象不应暴露实现细节。我选择将此解释为“尽可能避免使用 setter 和 getter”。

根据您的问题,我建议您有一个 getPriceDisplay() 方法,该方法返回一个包含格式化价格的字符串。

格式化的实际实现隐藏在实现细节中。您可以提供用于格式化的通用函数、使用一些后端调用或其他方式。这些细节对“测试”对象的消费者应该没有影响。

【讨论】:

  • 所以你认为 getPriceDisplay() 函数应该在我的“测试”类中?还是在我的网络表单代码后面?我想将它放在我的“测试”课程中会更有意义,但我不确定。无论如何感谢您的帮助:-)
  • 价格在 Test 中的存储方式是一个实现细节。将价格格式化为货币显示值的方法是一个实现细节。两者都属于 Test 类或(如 Heinzi 提到的)Test 模型类的表示层类。
【解决方案3】:

虽然这不是 OOP 方法,但在我看来,这是扩展方法的好时机。称它为.ToCurrency(),它具有货币格式...如果需要,可以从 Web.Config 文件中获取。

编辑

为了详细说明,我会在扩展方法中简单地调用.ToString("your-format")(当然,对于您的具体问题,这可以像.ToString("C") 一样简单)。这允许您在一个地方更改整个 UI 的格式。我发现这在处理 Web 应用程序中的 DateTime 格式时非常有用。

【讨论】:

  • 实际上我 认为 .net 允许您使用 .ToString() 方法转换为货币,但我不确定 100%。我实际上并没有试图找出如何转换为货币..只是以它为例,但谢谢! :-)
  • @alimac83 你是对的,你可以使用 .ToString("your-format") 我的建议是在扩展方法下使用它。这样,如果由于某种原因需要更改格式,无论您在何处显示它,您都将调用扩展方法。
【解决方案4】:

.ToString("C"); 不会做这项工作吗?这将在我想象的表示层中。

【讨论】:

    猜你喜欢
    • 2018-09-14
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多