1

我开始使用 ServiceStack,我不得不说我对它在引擎盖下的一切以及它的易用性印象深刻!

我正在用它开发一个主要是只读的应用程序。数据库可能每年更新 3 或 4 次,但其余时间解决方案将在电子信息板(大型触摸屏显示器)上显示数据。

数据库结构通过一些外键表很好地标准化,考虑到这一点,我认为最好将只读 API 与 CRUD API 分开。CRUD API 可用于创建和修改与数据库表匹配的 POCO 类的关系数据。然后,我将确保只读 API 将关系数据扁平化为跨越几个数据库表的几个 POCO,从而使数据更容易在只读 UI 上处理。

我只是在寻找关于这种关注点分离是否浪费精力或者是否有更好的方法来实现我需要的想法和建议?有没有人有类似的想法/想法?

4

1 回答 1

3

使用 ServiceStack 开发了一个类似的只读应用程序(一个地名词典,每季度/每年更新一次),我们开始优化读取 API,利用内置缓存:

    // For cached responses this has to be an object
    public object Any(CachedRequestDto request)
    {

        string cacheKey = request.CacheKey;
        return this.RequestContext.ToOptimizedResultUsingCache(
            base.Cache, cacheKey, () =>
                {
                    using (var service = this.ResolveService<RequestService>())
                    {
                        return service.Any(request.TranslateTo<RequestDto>()).TranslateTo<CachedResponseDto>();
                    }
                });
    }

CacheKey 只是:

    public string CacheKey
    {
        get
        {
            return UrnId.Create<CachedRequestDto>(string.Format("{0}_{1}", this.Field1, this.Field2));
        }
    }

我们确实开始创建 CRUD / POCO 服务,但为了加快速度,使用 SQL Server DTS/SSIS 或控制台应用程序等批量导入工具就足够了,如果需要,稍后会重新访问。

可能要考虑像 CQRS 这样的东西。

https://gist.github.com/kellabyte/1964094(或谷歌为 CQRS Martin Fowler,只能发布 2 个链接)。

最近开始实施其他搜索类型服务时,还发现以下文章很有价值:https ://mathieu.fenniak.net/stop-designing-fragile-web-apis/

于 2013-05-09T02:53:25.823 回答