我遇到的问题是我需要做大约40多次转换才能将松散类型的信息转换为存储在db,xml文件等中的强类型信息.
我打算用元组标记每种类型,即这样的转换形式:
host.name.string:host.dotquad.string
Run Code Online (Sandbox Code Playgroud)
它将提供从输入到输出表单的转换.例如,名称存储在字符串类型的主机字段中,输入转换为字符串类型的dotquad表示法并存储回主机字段.更复杂的转换可能需要几个步骤,每个步骤都是通过方法调用完成的,因此方法链接.
进一步检查上面的例子,元组'host.name.string'的字段主机名为www.domain.com.执行DNS查找以将域名转换为IP地址.应用另一种方法将DNS查找返回的类型更改为string类型的dotquad的内部类型.对于这种转换,有4个单独的方法被称为从一个元组转换为另一个元组.其他一些转换可能需要更多步骤.
理想情况下,我想了解一个在运行时如何构造方法链的小例子.开发时间方法链接相对简单,但需要页面和代码页来覆盖所有可能性,并且需要40多次转换.
我想做的一种方法是,在启动时解析元组,并将链写出到一个程序集,编译它,然后使用反射来加载/访问.它真的很丑陋,否定了我希望获得的性能提升.
我正在使用Mono,所以没有C#4.0
任何帮助,将不胜感激.鲍勃.
问题:使用许多方法实现流畅的接口会使类复杂度指标增长得非常快.
如何保持实现流畅界面的类的低复杂性?
有关特定课程的一些信息:
$this->wrapped某种方式转换对象.已经考虑过选项:
@method注释添加自动完成支持.高度期待任何选项的反馈(关于设计,性能,可维护性等).
检查过的例子:
Doctrine2 QueryBuilder:40 + 40-ish方法,2个类,1400 + 600行代码; 通过ExpressionBuilder课程分开
Symfony2 FormBuilder:10-areh暴露方法,1类,300行
问题可以被认为是与语言无关的 - 从PHP实现和设计观点的答案都同样受欢迎.
编辑:
目的是对函数式编程尼斯(易于使用和易于维护)工具(map,reduce,等)
我的同事首选的Java 8编码风格一直在链接异步调用,例如
CompletionStage<E> someMethod() {
return doSomething().thenCompose(a -> {
// ...
return b;
}).thenCompose(b -> {
// ...
return c;
}).thenCompose(c -> {
// ...
return d;
}).thenApply(d -> {
// ...
return e;
});
}
Run Code Online (Sandbox Code Playgroud)
我有类似上面的内容,但有一个额外的挑战:我需要回忆一些lambda中检索到的值,在后来的lambda中.例如,
CompletionStage<E> someMethod() {
return doSomething().thenCompose(a -> {
// ...
Foo foo = fooDAO.getFoos(a);
// ...
return b;
}).thenCompose(b -> {
// ...
return c;
}).thenCompose(c -> {
// ...
Bar bar = barDAO.getBars(foo);
// ...
return d;
}).thenApply(d -> {
// ... …Run Code Online (Sandbox Code Playgroud) 我的应用程序实际上有数百页.现在我必须在onSubmit表单上附加一个事件'disablePage'.我不想去每一页写下:
<form name="frmname" onSubmit="disablePage();">
Run Code Online (Sandbox Code Playgroud)
我现在正在做的是: -
来自common.js文件的摘录; [包含在所有页面中]
/* we have to attach 'attachFormSubmit' method on onLoad event,
otherwise forms[0] will always be null. If there is any alternative,
then please suggest one */
if (window.addEventListener){
window.addEventListener('load', attachFormSubmit, false);
} else if (window.attachEvent){
window.attachEvent('onload', attachFormSubmit );
}
function attachFormSubmit(){
forms = document.getElementsByTagName('Form');
if ( forms[0] ){ // there is only one form in all pages
if (forms[0].addEventListener){
forms[0].addEventListener('submit', disablePage, false);
} else if (forms[0].attachEvent){
forms[0].attachEvent('onsubmit', disablePage);
}
}
}
function …Run Code Online (Sandbox Code Playgroud) 我有一个XSLT文件,以便转换大量的数据.我想加一个"分裂"的功能,无论是作为一个链接的XSLT或者当前XSLT,它可以创建多个输出文件,以便限制在一定的阈值的文件的大小之内.我们假设输入XML如下:
<People>
<Person>
<name>John</name>
<date>June12</date>
<workTime taskID="1">34</workTime>
<workTime taskID="2">12</workTime>
</Person>
<Person>
<name>John</name>
<date>June13</date>
<workTime taskID="1">21</workTime>
<workTime taskID="2">11</workTime>
</Person>
<Person>
<name>Jack</name>
<date>June19</date>
<workTime taskID="1">20</workTime>
<workTime taskID="2">30</workTime>
</Person>
</People>
Run Code Online (Sandbox Code Playgroud)
使用muenchian分组,XSLT文件如下所示.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="PersonTasks" match="workTime" use="concat(@taskID, ../name)"/>
<xsl:template match="/">
<People>
<xsl:apply-templates select="//workTime[generate-id() = generate-id(key('PersonTasks',concat(@taskID, ../name))[1])]"/>
</People>
</xsl:template>
<xsl:template match="workTime">
<xsl:variable name="taskID">
<xsl:value-of select="@taskID"/>
</xsl:variable>
<xsl:variable name="name">
<xsl:value-of select="../name"/>
</xsl:variable>
<Person>
<name>
<xsl:value-of select="$name"/>
</name>
<taskID>
<xsl:value-of select="$taskID"/>
</taskID>
<xsl:for-each select="//workTime[../name = $name][@taskID = $taskID]">
<workTime>
<date>
<xsl:value-of select="../date"/>
</date>
<time>
<xsl:value-of …Run Code Online (Sandbox Code Playgroud) 我想使用 jQuery 选择并返回搜索到的文本。
问题是; 部分文本可能位于<span>或其他内联元素中,因此'waffles are tasty'在此文本中搜索时:'I'm not sure about <i>cabbages</i>, but <b>waffles</b> <span>are</span> <i>tasty</i>, indeed.',您不会得到任何匹配项,而文本对人们来说是不间断的。
让我们以这个 HTML 为例:
<div id="parent">
<span style="font-size: 1.2em">
I
</span>
like turtles
<span>
quite a
</span>
lot, actually.
<span>
there's loads of
</span>
tortoises over there, OMG
<div id="child">
<span style="font-size: 1.2em">
I
</span>
like turtles
<span>
quite a
</span>
lot, actually.
TURTLES!
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
使用这个(或类似的)JavaScript:
$('div#parent').selectText({query: ['i like', 'turtles', 'loads of tortoises'], caseinsensitive: true}).each(function () {
$(this).css('background-color', …Run Code Online (Sandbox Code Playgroud) Apple提供了一个简洁的可选链接示例
class Person {
var residence: Residence?
}
class Residence {
var numberOfRooms = 1
}
let john = Person()
if let roomCount = john.residence?.numberOfRooms {
println("John's residence has \(roomCount) room(s).")
} else {
println("Unable to retrieve the number of rooms.")
}
Run Code Online (Sandbox Code Playgroud)
想象一下尝试用一些算术运算来调整条件.这会导致编译器错误,因为模运算符不支持选项.
if john.residence?.numberOfRooms % 2 == 0 {
// compiler error: Value of optional type Int? not unwrapped
println("John has an even number of rooms")
} else {
println("John has an odd number of rooms")
}
Run Code Online (Sandbox Code Playgroud)
当然,您总是可以执行以下操作,但它缺乏可选链接的简单性和简洁性.
if …Run Code Online (Sandbox Code Playgroud) 我知道论坛上有类似的问题,但似乎没有一个能完全解决我的问题。现在我对 Java 8 很陌生,所以请耐心等待。我有一个产品列表,例如:
Input:
name category type cost
prod1 cat2 t1 100.23
prod2 cat1 t2 50.23
prod1 cat1 t3 200.23
prod3 cat2 t1 150.23
prod1 cat2 t1 100.23
Output:
Single line (name, category, type) summing the cost and count of products.
Product {
public String name;
public String category;
public String type;
public int id;
public double cost;
}
Run Code Online (Sandbox Code Playgroud)
我需要按名称、类别和类型对其进行分组,并生成一个汇总此数据的结果,并生成每个产品的总成本和数量。大多数示例显示按两个字段分组并使用单个条件聚合。
根据论坛上的建议,我想出了这个分组:
public class ObjectKeys {
ArrayList<Object> keys;
public ObjectKeys(Object...searchKeys) {
keys = new ArrayList<Object>();
for (int i = 0; …Run Code Online (Sandbox Code Playgroud) 我确实有一堂课:
class BaseModel:
def __init__(self):
pass
def read_data(self):
df = ...
return df
def transform_input(self, df):
df = ...
return df
def execute(self, df):
df = ...
return df
def run(self):
data = self.read_data()
data = self.transform_input(data)
data = self.execute(data)
Run Code Online (Sandbox Code Playgroud)
如何避免这些方法相继调用?是否可以这样做:
data = self.read_data().transform_input().execute()
Run Code Online (Sandbox Code Playgroud)
?
是否可以以某种方式链接这些方法并解决在此方法链中传递参数(数据)的问题?
对于我正在进行的一个项目,我和我的团队正在使用 Angular 7。我们对 Angular 7 有点陌生,所以我们都在合作学习一些东西是如何工作的,与我们已经使用过的 AngularJS 相比使用了几年。
我正在阅读Observables 中关于反模式的一些建议,并注意到如下示例:
this.http.get<MyRadModel>(`api/example/rad/${this.someId}`)
.mergeMap(radResult => {
// ... Instructions ...
return this.http.get<SomeOtherModel>(`api/example/other/${radResult.something}`)
})
.subscribe(otherResult => {
// ... Chained instructions! ...
});
Run Code Online (Sandbox Code Playgroud)
不用说,.pipe()由于 RxJS 的变化,你必须在 Angular 6+ 中使用它,所以实际应用它看起来有点不同......
this.http.get<MyRadModel>(`api/example/rad/${this.someId}`)
.pipe(
mergeMap(radResult => {
// ... Instructions ...
// Problem #1: 'Property something does not exist on radResult'.
// ... It actually *does*.
return this.http.get<SomeOtherModel>(`api/example/other/${radResult.something}`);
}
)
.subscribe(otherResult => {
// ... Chained instructions ...
});
Run Code Online (Sandbox Code Playgroud)
我注意到的一个问题是, …