我大部分时间都是C#程序员,大约10年前我就停止编写Java了,但是我试着通过阅读文章,与朋友交谈等方式来跟上Java的技术.
我听说过一个名为JavaFX的新的丰富的GUI框架,但找不到任何资源与非Java的相似之处.
由于我对C#和WPF非常熟悉,所以我想了解两种技术的相似或不同之处.
编辑:看到没有答案,我会尝试更具体:
......更多......
我正在将此更改为社区维基,以便比较可以不断更新(希望如此).
我有一块try catch代码:
try
{
...
}
catch(Exception ex)
{
ModelState.AddModelError(
"duplicateInvoiceNumberOrganisation", "The combination of organisation and invoice number must be unique");
}
Run Code Online (Sandbox Code Playgroud)
对于这段代码,我正在尝试将记录插入到数据库中:dba已将其设置为以便数据库检查重复项,如果存在重复项则返回错误.目前,正如您所看到的,无论发生什么错误,我都会向模型添加相同的错误.我希望它改变,所以如果这个错误是由dba设置的重复错误引起的,那么这个错误只会添加到模型中.
以下是我想要捕捉的错误.注意它在内部异常中.谁能告诉我如何专门捕捉这个?

我目前有一个服务层,它基于ASP.NET站点中的服务层验证一文.
根据这个答案,这是一个糟糕的方法,因为服务逻辑与违反单一责任原则的验证逻辑混合在一起.
我真的很喜欢提供的替代方案,但在重新分解我的代码时,我遇到了一个我无法解决的问题.
请考虑以下服务接口:
interface IPurchaseOrderService
{
void CreatePurchaseOrder(string partNumber, string supplierName);
}
Run Code Online (Sandbox Code Playgroud)
基于链接答案的以下具体实现:
public class PurchaseOrderService : IPurchaseOrderService
{
public void CreatePurchaseOrder(string partNumber, string supplierName)
{
var po = new PurchaseOrder
{
Part = PartsRepository.FirstOrDefault(p => p.Number == partNumber),
Supplier = SupplierRepository.FirstOrDefault(p => p.Name == supplierName),
// Other properties omitted for brevity...
};
validationProvider.Validate(po);
purchaseOrderRepository.Add(po);
unitOfWork.Savechanges();
}
}
Run Code Online (Sandbox Code Playgroud)
PurchaseOrder传递给验证器的对象还需要两个其他实体,Part并且Supplier(假设此示例中PO只有一个部分).
如果用户提供的详细信息与数据库中需要验证程序抛出异常的实体不对应,则Part和Supplier对象都可以为null.
我遇到的问题是,在此阶段验证器丢失了上下文信息(部件号和供应商名称),因此无法向用户报告准确的错误.我可以提供的最佳错误是"采购订单必须具有关联部件",这对用户没有意义,因为他们确实提供了部件号(它在数据库中不存在).
使用ASP.NET文章中的服务类,我正在做这样的事情:
public void …Run Code Online (Sandbox Code Playgroud) 通常,我倾向于使用以下驼峰大小写约定我的sql数据库列:
camelCase(注意第一个字母是小写的).
但是在使用C#时,我喜欢用以下约定命名对象的公共属性:
CamelCase(注意第一个是在uppwer的情况下).
实体框架的默认行为是将创建的类的属性命名为与它们在数据库中的相对列名相匹配.
是否有项目/解决方案级别的属性可以更改以解决此问题?
我目前正在学习WPF,并且偶然发现了弱事件的概念,但我真的很想"得到它".我已经在Stackoverflow上阅读了无数文章并查看了代码示例,但它并没有陷入其中.
这是我的困境:
因此,从上面我了解事件的使用如何导致内存泄漏以及为什么需要弱参考模式但阻止我理解的是弱事件模式如何实际实现这一目标?它有什么不同的做法?
当然,即使有一个管理事件的类,它仍然必须订阅和取消订阅源处理器的处理程序,因此引用必须存在,给出了使用事件的标准方法的相同问题.
有人请向我解释一下我遗漏或误解的基本概念,并帮助我"搞"弱事件模式.
在使用Entity Framework和ASP.NET MVC3验证我的模型时,我无法使用StringLengthAttribute.
我的模型基于实体框架实体,该实体具有部分类,该部分类使用MetadataType属性告诉MVC在搜索元数据时使用哪种类型.这显示在下面的代码中:
[MetadataType(typeof(PartMetadata))]
public partial class Part { }
class PartMetadata
{
[DisplayName("Part number")]
[Required(ErrorMessage="* Required")]
[StringLength(50, MinimumLength = 3, ErrorMessage = "* Part numbers must be between 3 and 50 character in length.")]
public string Number { get; set; }
[StringLength(255, MinimumLength=3,
ErrorMessage="* Part descriptions must be between 3 and 255 characters in length.")]
public string Description { get; set; }
[DisplayName("Drawing required?")]
public bool DrawingRequired { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是描述字段未正确验证.使用下面的代码我的模型被验证为OK,即使描述字段留空,我也被重定向到我的控制器的索引页面.
if (ModelState.IsValid)
{
return RedirectToAction("Index"); …Run Code Online (Sandbox Code Playgroud) 使用该FormClosing事件时,为什么代码e.Cancel = true;有效,但new CancelEventArgs().Cancel = true;不起作用?
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
new CancelEventArgs().Cancel = true;
}
Run Code Online (Sandbox Code Playgroud) 在我的项目中,我有一个小的数据结构Key.
public class Key implements Serializable {
private static final long serialVersionUID = 1L;
public String db;
public String ref;
public Object id;
protected Key() {
}
public Key(String db, String ref, Object id) {
this.db = db;
this.ref = ref;
this.id = id;
}
}
Run Code Online (Sandbox Code Playgroud)
是的,这个课程很简单,每个领域都可公开访问.
但有人建议我使用POJO风格的课程,但当我问他们为什么无法告诉我.
在我看来,调用getter和setter比直接访问字段要慢.
那么为什么我必须使用POJO编程风格呢?
如果我导航到以下stackoverflow URL,http://stackoverflow.com/questions/15532493它会自动附加问题的标题,如下所示:
http://stackoverflow.com/questions/15532493/mvc-custom-route-gives-404
也就是说,我可以在没有问题标题的情况下在我的浏览器中输入URL,并自动附加.
我如何在我的应用程序中实现相同的结果?(注意:我知道问题标题不会影响呈现的页面).
我有一个调用控制器,调用Users一个动作方法Details.我定义了以下路线:
routes.MapRoute("UserRoute",
"Users/{*domain}",
new { controller = "User", action = "Details" },
new { action = "^Details$" });
Run Code Online (Sandbox Code Playgroud)
由于这是一个Intranet应用程序,因此用户将根据其Windows帐户进行身份验证.我想将域名和用户名附加到URL.
如果我在视图中生成URL,如下所示:
@Html.ActionLink("Model.UserName", "Details", "User", new { domain = Model.Identity.Replace("\\", "/") })
Run Code Online (Sandbox Code Playgroud)
我得到一个如下所示的网址:
域/用户/ ACME/JSMITH
但是,如果用户Domain/Users/使用浏览器导航栏导航到URL ,则它与路径匹配,用户将进入用户详细信息页面.ACME/jsmith/在这种情况下,我想将其附加到URL上.
到目前为止我所做的研究表明我可能必须通过派生RouteBase和实现GetRouteData和GetVirtualPath方法来实现自定义路由对象,但我不知道从哪里开始(msdn documentaiton非常薄).
所以我想知道的是:
c# ×7
wpf ×3
.net ×2
asp.net ×1
asp.net-mvc ×1
attributes ×1
events ×1
formclosing ×1
java ×1
javafx ×1
javafx-2 ×1
pojo ×1
sql ×1
url ×1
validation ×1
weak-events ×1