标签: fluent-interface

Castle Windsor流利的注册 - Pick()有什么作用?

当使用城堡windsor自动注册时,我看到人们在做类似的事情

_container.Register(
  AllTypes.Pick().FromAssembly(Assembly.GetExecutingAssembly())
    .WithService.FirstInterface());
Run Code Online (Sandbox Code Playgroud)

对于我的生活,我无法弄清楚Pick()方法的作用,也无法找到任何文档.有谁可以向我解释一下?

api castle-windsor fluent-interface

6
推荐指数
1
解决办法
2116
查看次数

代码优先参考一对多

我有以下两个表:

本土化

Id                     int
Text                   string
Run Code Online (Sandbox Code Playgroud)

DINER

Id                     int
Name                   string
Description            string
Name_LocalizationID    int
Description_LocationID int
Run Code Online (Sandbox Code Playgroud)

现在我希望我的POCO像这样:

public class Diner{
   public int Id{get;set;}
   public ICollection<Localization> NameLocalization{get;set;}
   public ICollection<Localization> DescriptionLocalization{get;set;} 
}

public class Localization{
   public int Id{get;set;}
   public string Text{get;set;}
}
Run Code Online (Sandbox Code Playgroud)

问题是:我们如何使用EF Fluent API将NameLocalization和DescriptionLocalization属性映射到Localization的Id?谢谢

entity entity-framework fluent-interface code-first

6
推荐指数
1
解决办法
7593
查看次数

EF Code First:多对多和一对多

这可能只是因为我对EF Code First流畅API的了解不足,但我很难过.

我想模拟以下内容:

  • 集合与标识和名称
  • 一个用户收集与标识和名称
  • 每个用户只分配一个主要组
  • 每个用户可能有零个或多个次要组

我想要的表格结构如下:

  • ID
  • 名称

用户

  • ID
  • 名称
  • PrimaryGroupId

SecondaryGroupAssignments

  • 用户身份
  • GroupId的

我一直在试图用EF Code First模拟这个问题,但我无法接受用户和组之间的关系.很抱歉没有发布任何.NET代码(我很高兴),但无论如何它可能都是错的.

有没有办法制作EF模型呢?我假设我必须使用Fluent API进行某种配置.也许更好的问题是:Fluent API是否有任何好的,明确的参考?

谢谢!

database fluent-interface relationships ef-code-first entity-framework-4.1

6
推荐指数
1
解决办法
3669
查看次数

使用值类型的通用约束

我正在尝试流畅的扩展方法.

我有以下简单的扩展方法来执行安全转换.

     public static T As<T>(this Object source)
         where T : class
     {
         return source as T;
     }
Run Code Online (Sandbox Code Playgroud)

这很好用,但是当我尝试使用带有重载的valuetypes直观时

     public static T As<T>(this ValueType source)
         where T : struct
     {
         return (T)source;
     }
Run Code Online (Sandbox Code Playgroud)

我遇到了问题.方法解析逻辑总是选择上面的第一种方法,并给出结构不是类的语法错误(准确).

有没有办法处理上述问题,或者我是否应该在同一方法中测试和处理所有类型时采用删除约束的路径?

====编辑:回答问题====

我正在针对3.5框架编译这个.我并不是真的想要完成任何事情; 这只是上面的一个实验.我的兴趣被激发了,我把一些代码汇总在一起.

我并不特别担心它仍然是一个"安全"演员.这就是它的开始,并且可以使用default()保持安全 - 但这并不是问题和代码的重点,以确保"安全性"只是模糊不清.

至于表现力,没有value.As<int>()比表达更具表现力(int)value; 但为什么方法的用户必须"只知道"它只适用于引用类型?我尝试使用它更多的是关于方法的预期行为而不是表达性写作.

代码片段value.As<DateTime>()给出错误"类型'System.DateTime'必须是引用类型,以便在泛型类型或方法中使用它作为参数'T'.作为(对象)".从错误消息我看到它正在解决使用上面的top方法,因为它是需要引用类型的方法.

c# generics extension-methods fluent-interface constraints

6
推荐指数
1
解决办法
1796
查看次数

流畅的界面是否违反命令查询分离原则?

我开始编写一个流畅的界面,看看Martin Fowler在流畅的界面上写的一篇较旧的文章(我没有意识到他和Eric Evans创造了这个术语).在这篇文章中,Martin提到setter通常会返回正在配置或处理的对象的实例,他说这违反了CQS.

大括号世界中的常见惯例是修饰符方法是void,我喜欢它,因为它遵循CommandQuerySeparation的原则.这个约定确实妨碍了一个流畅的接口,所以我倾向于暂停这个案例的约定.

所以,如果我的流畅界面做了类似的事情:

myObject
  .useRepository("Stuff")
  .withTransactionSupport()
    .retries(3)
  .logWarnings()
  .logErrors();
Run Code Online (Sandbox Code Playgroud)

这真的违反了CQS吗?

更新我打破了我的示例,将日志警告和错误显示为单独的行为.

c# fluent-interface command-query-separation

6
推荐指数
2
解决办法
707
查看次数

流畅的接口 - 确保新的实例

我有一个类,它暴露了一个流畅的界面风格,我也想要线程安全.

目前,在类的实例上调用可链接方法会使用操作(Func<T>'s)设置各种集合.

当请求结果时,实际工作就会发生.这允许用户以任何顺序链接方法调用,以便:

var result = myFluentThing
.Execute(() => serviceCall.ExecHttp(), 5) 
.IfExecFails(() => DoSomeShizzle())
.Result<TheResultType>();
Run Code Online (Sandbox Code Playgroud)

(这里,5是重试失败的服务呼叫的次数.)

显然这不是线程安全的或可重入的.

有哪些常见的设计模式可以解决这个问题?

如果必须首先调用Execute方法,我可以简单地返回一个新的类实例,但每次都可以使用,因为任何方法都可以在链中的任何一点调用,你将如何解决这个问题?

我更感兴趣的是了解解决这个问题的各种方法,而不仅仅是为了"让它正常工作".

我把完整的代码放在GitHub上,任何人都需要更广泛的背景来实现我的目标:https://github.com/JamieDixon/ServiceManager

c# fluent-interface thread-safety reentrancy method-chaining

6
推荐指数
1
解决办法
625
查看次数

如何调试流畅的API?

流畅的API很棒.它们提供简洁易读的代码.
但是,如果事情没有预期,那将是一种严重的痛苦.

有没有办法在VS中看到方法调用链的中间结果?可能是一些加载项?

debugging fluent-interface visual-studio

6
推荐指数
1
解决办法
420
查看次数

EF Code First:多重约束违规

救命!- 我在导航模型ArticleType上收到以下错误:

发生了关系多重性约束违规

这是现有的数据库模式:

数据库模型

这是我的代码:

public class Article
{
    public int ID { get; set; }
    public virtual Stage Stage { get; set; }
    public virtual ArticleType ArticleType { get; set; } // Causes the violation
}

public class ArticleType
{
    public int ID { get; set; }
    public string Title { get; set; }
}

public class Stage
{
    public int ID { get; set; }
    public string Title { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我使用流畅的api进行绘图,这是该协会的摘录

// This …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework fluent-interface code-first

6
推荐指数
1
解决办法
8152
查看次数

流畅的界面和类复杂性

问题:使用许多方法实现流畅的接口会使类复杂度指标增长得非常快.

如何保持实现流畅界面的类的低复杂性?

有关特定课程的一些信息:

  • Class已经有25种方法,还会再增加15种方法.
  • 类中的所有方法都以$this->wrapped某种方式转换对象.
  • 几个(5-7)方法重用已经存在的方法(那些方法可以提取到类并通过继承添加,这里没有问题).

已经考虑过选项:

  1. 特征 - 我想支持PHP 5.3及更高版本.
  2. 每个方法一个类 - 大规模扩展链,不好.
  3. '插件' - 辅助类以某种方式注入"主类",通过魔术方法调用,并通过@method注释添加自动完成支持.

高度期待任何选项的反馈(关于设计,性能,可维护性等).

检查过的例子:

  1. Lodash:170- areh方法,1类,8400行

  2. Doctrine2 QueryBuilder:40 + 40-ish方法,2个类,1400 + 600行代码; 通过ExpressionBuilder课程分开

  3. Symfony2 FormBuilder:10-areh暴露方法,1类,300行


问题可以被认为是与语言无关的 - 从PHP实现和设计观点的答案都同样受欢迎.

编辑:

目的是对函数式编程尼斯(易于使用和易于维护)工具(map,reduce,等)

php language-agnostic fluent-interface chaining

6
推荐指数
1
解决办法
651
查看次数

如何在没有方法链的情况下使用"JSR-353:用于JSON处理的Java API"

我想与使用新的JSR-353(JSON Processing的Java API)分享我的问题/答案.具体来说,您可以在两个不同的"API"Streaming和Object API中操作JSON数据.

如果您在谷歌中输入"jsr-353教程",您将获得许多结果.

https://jcp.org/en/jsr/detail?id=353~ 具体要求的详细信息.

https://jsonp.java.net/~API的主站点,也链接到位于https://docs.oracle.com/javaee/7/tutorial/doc/jsonp的 "文档"下的Oracle Tutorial . htm 我稍后会详细介绍这个教程.

最后这一个

http://www.javabeat.net/java-json-api-jsr-353/

我想先谈谈最后一个链接,因为它为我提供了很多很好的细节,并且是其中一个真正的教程(还有其他的,但它们基本相同).

我真正试图了解的API不仅是这个API的新手,而且通常是JSON.

何时使用Streaming API和Object Model API?

如果您希望将JSON数据写入字符流(如文件或字节流),那么Streaming API将是最佳选择,因为它直接执行写入操作到缓冲区而无需在内存中构建对象树,即不是在创建最终JSON数据之前生成的中间形式.

如果要将JSON数据作为对象树保存在内存中,即不写入任何流,而是将树存储在内存中,以便可以重用JSON数据而无需重新分析它,或者也可以将对象树序列化为保留/保存JSON数据.这里JSON数据将以对象树的形式表示.

现在Streaming API描述对我来说很有意义,我需要保存一个文件,这对我来说很有意义.

对于Object API,它也是有意义的,保存对象,以便我可以在以后的代码中重用它,真棒.

问题是我没有得到我的问题的答案,我将解释我现在正在寻找什么.

我的问题是:

我基本上有一个包含其他对象/数组的对象.

最初我使用BufferedWriter将数据写入新行到文本文件中.

我的格式看起来像这样.

bw.write(1);
bw.newLine();
bw.write(2);
bw.newLine();

for(int i = 0; i < 4; i++)
{
bw.write(i);
bw.newLine();
}

bw.write(2);
bw.newLine();

for(int j = 0; j < 2; j++)
{
bw.write(j);
bw.newLine();
bw.write(j+5);
bw.newLine();
bw.write(2);
bw.newLine();
bw.write(j*4);
bw.newLine();
}

bw.write(12);
bw.newLine();

for(int k = 0; k …
Run Code Online (Sandbox Code Playgroud)

java json fluent-interface alternate jsr-353

6
推荐指数
1
解决办法
4709
查看次数