让我们假设我们将开始新项目 - 包含一些业务逻辑的应用程序,ASP.NET,WPF或两者的用户界面.我们想使用ORM或DAL代码生成器并在.NET类中实现我们的业务逻辑.我们可以通过几种基本方式表达我们对业务领域的看法:
您更喜欢写什么:"创建表人(...)"或"公共类人{...}"?
这些方式的优点和缺点是什么?
也许有一些特殊的情况,一种方式比另一种更好?
如何在特定项目中选择最佳方式?
我对"Code-First"(或"Model-First")方式非常熟悉,但似乎大多数ORM都设计为代码生成器或映射器,假设我将手动实现数据库结构和业务类.
基于expirience的答案和ORM的例子特别受欢迎.
编辑:注意,问题不是"在开始新项目时我应该先做什么?",但"应该手动声明/自动生成什么,域类或数据库结构?"
我使用WPF数据绑定实现IDataErrorInfo接口的实体.一般来说,我的代码如下所示:
商业实体:
public class Person : IDataErrorInfo
{
public string Name { get; set;}
string IDataErrorInfo.this[string columnName]
{
if (columnName=="Name" && string.IsNullOrEmpty(Name))
return "Name is not entered";
return string.Empty;
}
}
Run Code Online (Sandbox Code Playgroud)
Xaml文件:
<TextBox Text="{Binding Path=Name, Mode=TwoWay, ValidatesOnDataErrors=true}" />
Run Code Online (Sandbox Code Playgroud)
当用户点击"创建新人"后执行以下代码:
DataContext = new Person();
Run Code Online (Sandbox Code Playgroud)
问题是,当刚创建person时,其名称为空,WPF会立即绘制红框并显示错误消息.我希望它仅在名称已编辑且焦点丢失时显示错误.有人知道这样做的方法吗?
我正在考虑以下列方式在2层WPF(或Windows窗体)应用程序中使用事务:
当我们打开新表格来编辑数据,在此交易中透明地编辑和保持更改时,我们可以开始新的交易.然后我们可以单击"确定"按钮并提交事务,或"取消"按钮并回滚它.如果我们想要打开另一个包含此数据的对话框窗口,我们可以使用嵌套事务.
问题是:这种使用交易的方式是否可以接受?我知道有很多不同的方法来实现这样的逻辑,但我想列出这个逻辑的优点和缺点.
我有以下代码:
[TestMethod]
public void StartWorkInFirstThread()
{
if (SynchronizationContext.Current == null)
SynchronizationContext.SetSynchronizationContext(
new SynchronizationContext());
var syncContext = SynchronizationContext.Current;
Console.WriteLine("Start work in the first thread ({0})",
Thread.CurrentThread.ManagedThreadId);
var action = ((Action) DoSomethingInSecondThread);
action.BeginInvoke(CallbackInSecondThread, syncContext);
// Continue its own work
}
private static void DoSomethingInSecondThread()
{
Console.WriteLine("Do something in the second thread ({0})",
Thread.CurrentThread.ManagedThreadId);
}
private void CallbackInSecondThread(IAsyncResult ar)
{
Console.WriteLine("Callback in the second thread ({0})",
Thread.CurrentThread.ManagedThreadId);
var syncContext = (SynchronizationContext) ar.AsyncState;
syncContext.Post(CallbackInFirstThread, null);
}
private void CallbackInFirstThread(object obj)
{
Console.WriteLine("Callback in the …Run Code Online (Sandbox Code Playgroud) .net ×3
database ×2
asynchronous ×1
data-binding ×1
orm ×1
transactions ×1
validation ×1
wpf ×1