gpt4 book ai didi

C#设计题

转载 作者:行者123 更新时间:2023-11-30 12:52:33 25 4
gpt4 key购买 nike

<分区>

我开始设计一个小型应用程序并且有一些与架构相关的问题。

我有一些基本实体,我愿意为它们建模 - RepositoryIndicator .

Repository基本上是一个使用 Repository Pattern 的门面,它能够使用一些数据库持有者检索/存储任意实体(现在它是 NHibernate 驱动的,但我想这实际上并不重要)。

Indicator可以称为我的应用程序的逻辑核心。它用于组合抽象值和实现该值的确切时间(因此它形成并在 Value - Time 对上运行)。

我愿意做这个Indicator尽可能通用,但我仍然认为我当前的解决方案是一个很大的失败:)

查看以下代码块:

public interface IIndicator<T>
{
IEnumerable<T> RetrieveValues(DateTime start, DateTime end);
}

// Should also have something like indicator wrapper / proxy stub here - anything
// that represents the 'IIndicator' interface acts through that proxy and
// caches the evaluated data using it.

这是实现指标的基本尝试(现在这实际上可以被视为模拟):

public class Indicator<TValue> :
// Self-referencing generic parameter.
IIndicator<Indicator<TValue>.TimestampProxy>
{
// Proxy, which is used to add the timestamp to
// every indicated value.
public class TimestampProxy
{
public TValue Value;
public DateTime Time;

public TimestampProxy(DateTime time, TValue value)
{
Time = time;
Value = value;
}
}

private readonly IRepository repository;

public Indicator(IRepository repository)
{
this.repository = repository;
}

public IEnumerable<TimestampProxy> RetrieveValues(DateTime start, DateTime end)
{
// Note the custom time stamp comparation in the lambda
// expression. Comparation includes the 'start' and 'end' limits.
IQueryable<TimestampProxy> queryable = repository.Retrieve<TimestampProxy>(
x => x.Time.CompareTo(start) >= 0 && x.Time.CompareTo(end) <= 0);

return queryable.ToList();
}
}

现在 - 这可能看起来不错,但我绝对确定 TimestampProxy used真的很邪恶。

这也让事情变得难以理解(例如,方法签名 IEnumerable<TimestampProxy> RetrieveValues(...) 可能会导致检查代码的人“wtf?!” 短语)。

不幸的是,我想不出一个更好的解决方案/全局重新设计 - 你能建议我怎么做吗,或者简单地告诉我一些关于应该如何完成这种功能的想法?

谢谢。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com