0x02-创建并缓存 Object Visitor
创建并缓存 Object Visitor。
一切都是为了更加高效
前篇,我们通过一个简单的实例来介绍了如何使用 Object Visitor 来将 OrderInfo
的所有属性连接并输出。
虽然效果已经实现了,但是为了简化篇幅还是存在一些性能不佳的实践,本节我们就来介绍使用 Newbe.ObjectVisitor 真正完整的姿势。
缓存 Object Visitor
上节的核心代码如下:
var sb2 = new StringBuilder();
var visitor = order.V()
.ForEach((name, value) => sb2.AppendFormat("{0}: {1}{2}", name, value, Environment.NewLine));
visitor.Run();
Console.WriteLine(sb2.ToString());
这段代码中,我们直接创建了一个 object visitor ,然后在后续直接使用它,接着方法就直接结束了。
对于一次性使用的 object visitor 来说,这没有问题。但是如果这段代码位于常用的热点路径上,这样重复创建 object visitor 的方式无疑是一种浪费。因此,我们可以考虑缓存 object visitor 在静态字段中。
于是,我们就得到了下面这段代码:
using System;
using System.Text;
using Newbe.ObjectVisitor;
namespace yueluo_dalao_yes
{
class Program
{
private static readonly StringBuilder _sb = new StringBuilder();
private static readonly ICachedObjectVisitor<OrderInfo> _visitor = default(OrderInfo).V()
.ForEach((name, value) => _sb.AppendFormat("{0}: {1}{2}", name, value, Environment.NewLine))
.Cache();
static void Main(string[] args)
{
var order = new OrderInfo
{
OrderId = 1,
Buyer = "yueluo",
TotalPrice = 62359.1478M
};
_visitor.Run(order);
Console.WriteLine(_sb.ToString());
}
}
public class OrderInfo
{
public int OrderId { get; set; }
public string Buyer { get; set; }
public decimal TotalPrice { get; set; }
}
}