在Pluralsight课程领域驱动设计基础,有一个例子说明聚合物的设计是如何形成的.该示例涉及诊所中的患者预约.该约会与例如医生或检查室有关系.并且在该示例之前进行分析,得出结论:约会不应该是Doctor和ExamRoom的聚合根.设计演变的一个步骤是从具有对象引用的Appointment到Doctor和ExamRoom对象,到保存这些其他实体的原始id,DoctorId和ExamRoomId.他们通过以下方式激励这一变化:"通过简单地包含相关概念的ID而不是对象引用,我们能够确保在我们保留约会时创建和更改约会对我们的系统影响最小"
我的第一个问题:这是一种常见的设计模式吗?如果我理解正确,它会推广到如下:如果对象A与对象B相关,但在A上操作永远不需要对B进行更改,则通过其id而不是B本身引用它.这是你会推荐的吗?
我的第二个问题:这与DDD有什么关系吗?我的意思是,约会不应该是医生的总根,并不意味着它不能容纳对象,或者我错过了什么?
我已经创建了一个WCF REST服务,它使用nhibernate连接到sql server compact edition数据库.因此,我配置NHibernate数据源,如:
<property name="connection.connection_string">Data Source=[Path]\MyDb.sdf</property>
Run Code Online (Sandbox Code Playgroud)
我现在遇到的烦恼是我无法弄清楚如何避免在配置中写出绝对路径.这很烦人,因为我将数据库文件保存为App_Data文件夹中项目的一部分.所以我不应该更新路径,例如当我将项目部署到另一个位置时,即使绝对路径不同.
使用procmon我注意到如果我不在数据源配置中写一个绝对pat,它被解释为相对于路径:*C:\ Program Files(x86)\ Common Files\Microsoft Shared\DevServer\10.0*.
是否有可能让nhibernate假设我们想要将路径与应用程序bin文件夹相关联(这是我的App_Data/MyDb.sdf结束的地方)?
所以我最近开始使用ASP.NET MVC 4.我正在使用剃须刀引擎.我的问题是关于视图文件,后缀为cshtml.在我看来,这些是由razor预编译成*.cs文件,然后编译成MSIL.(我作为JSP开发人员熟悉的模式.)我做出这个假设的一个原因是,如果我在cshtml文件中输入一些无效的c#代码,我会得到一个编译错误,如下所示:
第34行:公共类_Page_Views_BaseDataAdmin_Index_cshtml:...
第34行并不表示错误在cshtml文件中的位置,就像类_Page_Views_BaseDataAdmin_Index_cshtml似乎是指常规的.net类而不是视图文件一样.
所以我的问题是:我在哪里可以找到cs文件?具体来说,在上面的例子中,"_ Page_Views_BaseDataAdmin_Index_cshtml.cs"?也许我需要添加一些配置来告诉MVC将这个.cs文件保存在磁盘上,如果是这样,我该怎么做?
谢谢!
我有这样的方法:
public void Foo(params string[] args) {
bar(args[0]);
bar(args[1]);
}
Run Code Online (Sandbox Code Playgroud)
新要求会导致这样的变化:
public void Foo(string baz, params string[] args) {
if("do bar".Equals(baz)) {
bar(args[0]);
bar(args[1]);
}
}
Run Code Online (Sandbox Code Playgroud)
问题是即使我已经更改了方法签名,也没有发生编译错误,当然这是正确的,但是我希望每次调用没有指定Foo
参数的方法时都会出现编译错误baz
.也就是说,如果Foo
在更改之前的呼叫是这样的:
Foo(p1,p2); //where p1 and p2 are strings
Run Code Online (Sandbox Code Playgroud)
它现在需要是这个:
Foo(baz,p1,p2);
Run Code Online (Sandbox Code Playgroud)
如果它不会以这种方式改变,p1
则将被赋值给baz
,并且params数组args
的长度为1,并且OutOfBounds
将抛出异常.
更改签名并确保所有调用代码都相应更新的最佳方法是什么?(真实场景是Foo
许多项目共享的程序集中的生命自动构建在构建服务器上.编译错误因此是检测需要触及的所有代码以容纳更改的简单方法.)
编辑: 正如Daniel Mann和其他人指出的那样,上面的例子表明我根本不应该使用params.所以我应该解释一下,在我的真实世界的例子中,并不总是args需要有两个元素的情况,就Foo中的逻辑而言,args可以包含任意数量的元素.所以我们说这是Foo:
public void Foo(string baz, params string[] args) {
if("do bar".Equals(baz)) {
int x = GetANumberDynamically();
for(int i = 0; i<x; i++)
bar(args[i]);
} …
Run Code Online (Sandbox Code Playgroud) 我正在使用automapper(针对.net 3.5).这是一个例子来说明我想要做的事情:
我想将A对象映射到B对象.类定义:
class A
{
public I1 MyI { get; set; }
}
class B
{
public I2 MyI { get; set; }
}
interface I1
{
string StringProp1 { get; }
}
interface I2
{
string StringProp1 { get; }
}
class CA : I1
{
public string StringProp1
{
get { return "CA String"; }
}
public string StringProp2 { get; set; }
}
class CB : I2
{
public string StringProp1
{
get { return "CB …
Run Code Online (Sandbox Code Playgroud) 我在 MacOS 上,zsh。
我已经安装了jenv,添加了几个java版本。
我跑了
jenv enable-plugin maven
Run Code Online (Sandbox Code Playgroud)
和
jenv enable-plugin export
Run Code Online (Sandbox Code Playgroud)
jenv医生返回:
[OK] JAVA_HOME 变量可能由 jenv PROMPT 设置
[OK] 路径中的 Java 二进制文件是 jenv 垫片
[OK] Jenv 已正确加载
jenv 版本返回:
* system (set by /Users/[user]/.jenv/version)
1.8.
1.8.0.271
11
11.0
...
Run Code Online (Sandbox Code Playgroud)
但是当我启动终端会话并运行 mvn --version 我得到
The JAVA_HOME environment variable is not defined correctly
This environment variable is needed to run this program
NB: JAVA_HOME should point to a JDK not a JRE
Run Code Online (Sandbox Code Playgroud)
如果我使用 jenv 设置非系统 java 版本,它可以正常工作,例如:
~/ jenv shell 11 …
Run Code Online (Sandbox Code Playgroud) 我在外部服务器(IIS7)上部署了一个REST服务.当我在Dev服务器上从VS启动服务时,它工作正常.但在服务器上我得到:
Request Error, The server encountered an error processing the request. Please see the service help page for constructing valid requests to the service.
如何获得有关此错误的更多详细信息?我查看了在IIS管理器中为此网站的"日志记录"功能配置的日志文件目录,但看起来此站点根本没有文件.
我刚刚更新为Idea 2016.3.2。并不断收到此错误。
没有足够的内存来执行请求的操作。请增加“ Xmx”设置并重新启动IDE,以使更改生效。
我做的最后一件事是将idea.vmoptions文件中的Xmx内存选项增加到2048(如此答案所指示,如何在Mac上的IntelliJ IDEA中增加IDE内存限制?)
但是它仍然会耗尽内存。
有人知道我需要做什么吗?
...经过更多研究之后,在我看来,这似乎是一个导致内存故障的git进程。当我打开git管理的项目时启动。
摘录自日志:
java.lang.OutOfMemoryError:Java堆空间位于java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:124)处的java.util.Arrays.copyOf(Arrays.java:3332)处,java.lang.AbstractStringBuilder.append(AbstractStringBuilder)。 java.lang.StringBuilder.append(StringBuilder.java:136)上的java:448)git4idea.history.GitHistoryUtils $ 2.onLineAvailable(GitHistoryUtils.java:579)位于sun.reflect.GeneratedMethodAccessor129.invoke(未知源)处。在com.intellij.util.Event.Dispatcher.dispatch(EventDispatcher.java:99)处的com.intellij.util.EventDispatcher.dispatch(EventDispatcher.java:99)处的java.lang.reflect.Method.invoke(Method.java:498)处的Reflection.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) .util.EventDispatcher.access $ 200(EventDispatcher.java:35)位于com.intellij.util.EventDispatcher $ 2.invoke(EventDispatcher。com.sun.proxy。$ Proxy123.onLineAvailable(java:79)at git4idea.commands.GitLineHandler.notifyLine(GitLineHandler.java:144)at git4idea.commands.GitLineHandler.notifyLines(GitLineHandler.java:106)at git4idea.commands.GitLineHandler.onTextAvailable(GitLineHandler.java:74)位于git4idea.commands.GitTextHandler $ 1.onTextAvailable(GitTextHandler.java:90)位于sun.reflect.GeneratedMethodAccessor72.invoke(Unknown Source)位于sun.reflect.DelegatingMethodokeorI (DelegatingMethodAccessorImpl.java:43)(位于java.lang.reflect.Method.invoke(Method.java:498)(位于com.intellij.execution.process.ProcessHandler $ 4.invoke(ProcessHandler.java:226))(位于com.sun.proxy) 。$ Proxy16.onTextAvailable(未知源),位于com.intellij.execution.process.ProcessHandler.notifyTextAvailable(ProcessHandler.java:200)在com.intellij.util.io的com.intellij.util.io.BaseOutputReader.sendText(BaseOutputReader.java:202)的com.intellij.execution.process.BaseOSProcessHandler $ SimpleOutputReader.onTextAvailable(BaseOSProcessHandler $ on) com.intellij.util.io.BaseOutputReader.readAvailableBlocking(BaseOutputReader.java:140)的com.intellij.util.io.BaseDataReader.readAvailable(BaseDataReader.java:82)的.BaseOutputReader.processInput(BaseOutputReader.java:186) com.intellij.util.io.BaseDataReader $ 1.run(BaseDataReader.java:61)处的com.intellij.util.io.BaseDataReader.doRun(BaseDataReader.java:160)java.util.concurrent.Executors $ RunnableAdapter.call (Executors.java:511)在java.util.concurrent.FutureTask.run(FutureTask.java:266)在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)2017-01-04 10:16:01,967 [393766]错误-.intellij.util.EventDispatcher-IntelliJ IDEA 2016.3.2构建IU-163.10154.41 2017-01-04 10:16:01,967 [393766]错误- .intellij.util.EventDispatcher-JDK:1.8.0_112-release 2017-01-04 10:16:01,967 [393766]错误-.intellij.util.EventDispatcher-VM:OpenJDK 64位服务器VM 2017-01-04 10 :16:01,967 [393766]错误-.intellij.util.EventDispatcher-供应商:JetBrains sro 2017-01-04 10:16:01,967 [393766]错误-.intellij.util.EventDispatcher-操作系统:Mac OS X 2017-01 -04 10:16:01,971 [393770]错误-.intellij.util.EventDispatcher-最后操作:EditCustomVmOptions 2017-01-04 10:16:03,231 [395030]错误-.intellij.util.EventDispatcher-Java堆空间2 Build IU-163.10154.41 2017-01-04 10:16:01,967 [393766]错误-.intellij.util.EventDispatcher-JDK:1.8.0_112-release 2017-01-04 10:16:01,967 …
我正在使用Kendo UI Grid.这是我的代码:
<body>
<div id="myGrid"></div>
<script type="text/javascript">
$(function(){
var rows = [
{name: "name001", id: "001", group: "G1"},
{name: "name002", id: "002", group: "G1"},
{name: "name003", id: "003", group: "G2"},
{name: "name004", id: "004", group: "G2"},
];
var myDataSource =
new kendo.data.DataSource({
data: rows,
pageSize: 3,
});
myDataSource.read();
$("#myGrid").kendoGrid({
dataSource: myDataSource,
columns: [
{field:"name", title:"The Name"},
{field:"id", title:"The Id"},
{field:"group"},
{command:["edit", "destroy"]}
],
scrollable: false,
pageable: true,
sortable: true,
groupable: true,
filterable: true,
editable: "inline"
});
});
</Script>
</body> …
Run Code Online (Sandbox Code Playgroud) 为什么这样做:
decimal dec = new Decimal(33);
double dd = (double) dec;
Console.WriteLine(dd);
Run Code Online (Sandbox Code Playgroud)
但不是这个:
decimal dec = new Decimal(33);
object o = (object)dec;
double dd = (double) o;
Console.WriteLine(dd);
Run Code Online (Sandbox Code Playgroud)
第二个例子抛出:
System.InvalidCastException:指定的强制转换无效.
这个问题来自我有一个通用方法的情况
public T GetValue(string q)
Run Code Online (Sandbox Code Playgroud)
从数据源获取值.这些值的类型是未知的,但该方法假定它可以将值转换为T.有时,值将是对象{decimal},T将是double,在这种情况下将抛出InvalidCastException.但原则上这不应该是一个问题,因为值是一个小数(虽然是一个对象的盒子),可以强制转换为double.
我该如何处理这个问题呢?
使用java 8 Optional,有没有办法编写这行代码:
Bar bar = fooOpt.isPresent() ? new Bar(fooOpt.get().getX()) : null;
Run Code Online (Sandbox Code Playgroud)
就像是:
Bar bar = fooOpt.ifPresent(f -> new Bar(f.getX()), null)
Run Code Online (Sandbox Code Playgroud) 我正在开发一个Windows服务.所以我去尝试在我的机器上安装它:我打开一个开发人员命令提示符,我忘了以管理员身份运行.我将目录位置更改为服务项目的bin\debug文件夹.在命令提示符中输入:D:\ code\MyService\bin\Debug> C:\ Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe MyService.exe
我收到一些我不记得的错误,但是这条消息让我想起我需要以管理员身份运行cmd窗口.所以我以管理员身份重新启动提示.再次输入与InstallUtil.exe相同的命令.这次返回的消息是"访问被拒绝".
所以我查看了InstallUtil.exe文件,结果发现文件是0 kb,仅在几秒前修改过!...已删除的可执行文件已删除,只留下一个空文件?
而且,我不是唯一一个:http://ilanas.blogspot.se/2007/02/net-wtf-installutilexe-gets-corrupted.html
任何人都有这方面的任何信息?
我在dropwizard REST资源上实现了一个PATCH方法.目前只有要修补的资源属性的子集.目前只能实现更换操作.
如果我看到未PATCH
支持的属性/路径请求,我应该返回哪个HTTP代码?如果请求不受支持add
或remove
操作,我应该返回什么?
c# ×2
java ×2
rest ×2
.net ×1
asp.net-mvc ×1
automapper ×1
boxing ×1
casting ×1
config ×1
dropwizard ×1
generics ×1
heap-memory ×1
http ×1
http-patch ×1
iis-7 ×1
java-8 ×1
jenv ×1
kendo-ui ×1
macos ×1
optional ×1
razor ×1
unboxing ×1
windows ×1