我正在思考一个C#库的设计,它将有几个不同的高级函数.当然,这些高级功能将尽可能使用SOLID类设计原则来实现.因此,可能存在供消费者定期直接使用的类,以及作为那些更常见的"最终用户"类的依赖性的"支持类".
问题是,设计库的最佳方法是:
我目前的想法是为常见的DI库提供一些"DI注册模块"(例如,一个StructureMap注册表,一个Ninject模块),以及一个非DI的集合或工厂类,并包含与这几个工厂的耦合.
思考?
在编写RESTful Web服务时,如果我在客户端(当前是.NET胖客户端)上启用任何类型的缓存,我会遇到问题.默认情况下,Jersey不发送任何类型的缓存控制头,因此客户端会自动缓存大多数页面(这似乎是有效的行为).
我想让Jersey默认发送一个"no-cache"的缓存控件,然后特别是响应覆盖缓存控件.
有没有办法和泽西这样做?
我发现RESTeasy能够使用@NoCache注释来指定整个类的设置,但我没有找到与Jersey类似的东西.
我已经开始尝试使用Backbone.js,并对Backbone.Model上url属性的文档文档感到震惊.
特别是,我正在构建一个使用HATEOAS/hypermedia来驱动客户端的REST API.
我可以看到Backbone为集合中的项目构建URL本身的默认行为的有用性,但对于我的情况,我更倾向于使用已解析的数据构建模型URL.
有没有人在Backbone上扩展/构建它来做到这一点?也许建立在像HAL这样的"标准"上?
编辑:
为了澄清,让我说我有以下内容:
获取/订单>>
[
{
"_links": {
"self": "/orders/123"
}
"name": "Order #123",
"date": "2012/02/23"
},
{
"_links": {
"self": "/orders/6666"
}
"name": "Order #666",
"date": "2012/03/01"
},
]
Run Code Online (Sandbox Code Playgroud)
我有一个订单模型,如:
var Order = Backbone.Model.extend({
});
Run Code Online (Sandbox Code Playgroud)
我希望该url
属性能够自动退出HAL中的"self"引用.我认为创建一个新的基础模型(未经测试):
var HalModel = Backbone.Model.extend({
url: function() {
return get("_links").self;
},
});
Run Code Online (Sandbox Code Playgroud)
思考?
我在我的应用程序中使用PrintDocument进行一些自定义打印.当我们的项目成功打印时,我需要记录.我最初通过以下方式实现了这一点:
print_doc.EndPrint += (o,e) => printed_callback ();
Run Code Online (Sandbox Code Playgroud)
printed_callback
打印完成后调用我的调用.但是,现在我正在添加预览支持,我PrintDocument
将以完全相同的方式传递给PrintPreviewDialog.这样做会导致在EndPrint
初始呈现预览所需的打印输出后调用事件.
因此,即使用户单击"预览"然后关闭预览,也会调用我们的日志记录代码.
有关如何区分真实打印输出和"预览打印"的任何建议?不幸的是,我不能只是因为用户可能会点击预览对话框中的"打印"按钮并触发打印输出EndPrint
而PrintDocument
传递给PrintPreviewDialog
用户.
我正在开发一个新的REST-ful API,该API的主要/唯一使用者是智能/非Web浏览器客户端。我有一个由后台进程(而不是由客户端本身)维护/更新的集合资源。第一次迭代所需的唯一内容类型是JSON。URI类似于:
/items/
-代表项目集合的资源。/items/123
-代表ID为的单个项目的资源123
。虽然客户端将不会创建新项目,也不会更新集合以添加/删除项目,但它将更新单个项目中的某些值。我的计划是使用我自己的JSON补丁格式,使用HTTP PATCH更新项目资源。
将有许多并发客户端读取项目,并同时更新不同的项目,并偶尔对同一项目进行并发更新,尽管允许一定程度的“最终一致性”,但我想将其设计为“缓存友好” “一种可能的方式。阅读RFC的PATCH,我发现对PATCH的成功响应后,如果有响应,则应使用响应更新Request-URI的缓存。问题归结为:
我要:
A)在/items/
集合资源JSON 表示中包含各个项目的完整表示,然后将PATCH发送到/items/
URI,并以补丁格式包括要更新的项目?
优点:
N
为了显示资源列表而执行请求数items
客户端更新项目时使的所有缓存无效。缺点:
要么
B)在资源集合的JSON表示中,仅包括指向所包含项目的链接,并让客户端在发现集合中的哪些项目后请求各个项目。HTTP PATCH将发送到单个项目URI(例如/items/123
)
优点:
缺点:
N+1
请求以显示项目的完整列表。如果我正在编写一个包含多个构造函数参数的类,例如:
class A{
public A(Dependency1 d1, Dependency2 d2, ...){}
}
Run Code Online (Sandbox Code Playgroud)
我通常会创建一个"参数持有者"类的类,如:
class AArgs{
public Dependency1 d1 { get; private set; }
public Dependency2 d2 { get; private set; }
...
}
Run Code Online (Sandbox Code Playgroud)
然后:
class A{
public A(AArgs args){}
}
Run Code Online (Sandbox Code Playgroud)
通常,使用DI容器我可以为依赖关系配置构造函数并解析它们,因此当构造函数需要更改时,影响最小.
这被认为是反模式和/或反对这样做的任何论据吗?