我最近在一个.Net WPF项目上建立了一个零售销售点系统,我第一次使用了MVP模式.我花了一点时间围绕着改变方法,但是一旦我这样做,我就认为这个概念震撼了!
我的问题是:MVC,MVP和MVVM之间有什么区别?如果有明确的区别,是否有关于何时应该使用一种模式而不是另一种模式的准则?
如果有人可以就此提供指导,或者指出解释差异的文章,我将非常感激.
任何人都可以推荐一些良好的资源来开始使用Unity框架吗?我从Codeplex下载了源代码并将其编译.所以现在我有一组已编译的二进制文件,下一步该怎么做?我理解控制反转的原理,但对Unity框架的细节知之甚少.
我已从Codeplex下载了Unity文档,但它似乎针对的是已经具备良好框架知识的用户.
我真正想要的是Unity的一些好的"入门"类型指南,或者一些基本的示例应用程序.
感谢收到好文章,样本或博客的任何指示.
来自RichardOD的好建议: David Hayden的屏幕演员
所以我是一个相当大的LOB应用程序的概念验证阶段.该应用程序将部署到许多组织中的许多桌面(200+).它将包含许多CRUD类型的屏幕(大约100个),以及一些非常复杂的过程,如发票生成和财务分类帐集成.它还将包含大量报告.
我已经做了很多功课,并且几乎已经确定了以下技术堆栈:
所有缺少的是表示层,所以我的问题是:
Silverlight 3是构建如此大型应用程序的合适技术吗?
最初我担心Silverlight缺少报告故事,但现在有一个可用的纪念报告工具可以解决问题.所以现在我想知道我的应用程序的大小以及当他们尝试在浏览器中下载时的性能.凭借100多个"屏幕"和大量报告,无论如何都不会轻量级.
Silverlight 3是明智的选择还是我应该关注WPF?SL3的主要原因是在许多组织中部署到大量桌面的问题.
我是NHibernate(和ORMS)的新手,并试图掌握它所呈现的无数不同选项.作为参考,我使用Fluent NHibernate和单独的业务对象,而这些对象又使用DTO纯粹用于数据访问.我的应用程序架构必须同时支持Windows和Web"前端".
我的quandry是一种普遍的方法,因为似乎有很多选择.我的DTO看起来像下面的示例.每个DTO都引用了一个从BO传递给它们的ISession.他们负责自己的负载并保存:
public class EmployeeDTO...
// Data Properties to be persisted to the database
public virtual int Id { get; private set; }
public virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
public virtual ISession Session { get; set; }
// Save logic
public virtual void Save()
{
var transaction = Session.BeginTransaction();
Session.SaveOrUpdate(this);
transaction.Commit();
}
// Load logic
public virtual void Load(int id)...
Run Code Online (Sandbox Code Playgroud)
首先: 这是正确的方法吗 - DTO是否有能力自行保存和加载?
其次: 无论保存/加载代码在哪里,您是否应该在生命周期或对象中使用相同的ISession,还是应该在每次需要数据库交互时都对ISessionFactory和每个数据库交互都打开一个新会话?
// Open a …Run Code Online (Sandbox Code Playgroud) 我正在使用MVVM模式构建一个WPF形式的简单数据输入应用程序.每个表单都有一个展示所有数据等的presenter对象.我想使用WPF命令启用和禁用编辑/保存/删除按钮和菜单选项.
我的问题是这种方法似乎要求我向代码隐藏添加大量代码.我试图保持我的表示层尽可能薄,所以我更倾向于这个代码/逻辑在我的演示者(或ViewModel)类中,而不是在代码隐藏中.任何人都可以提出一种方法来实现同样的事情而无需代码隐藏吗?
我的XAML看起来有点像这样:
<Window.CommandBindings>
<CommandBinding
Command="ApplicationCommands.Save"
CanExecute="CommandBinding_CanExecute"
Executed="CommandBinding_Executed"
/>
</Window.CommandBindings>
Run Code Online (Sandbox Code Playgroud)
我的代码隐藏看起来有点像这样:
private void CommandBinding_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = (
_presenter.SelectedStore != null &&
_presenter.SelectedStore.IsValid);
}
Run Code Online (Sandbox Code Playgroud) 我无法弄清楚如何创建外键约束.我的数据模型是固定的,不受我的控制,它看起来像这样:
CREATE TABLE Enquiry
(Enquiry_Ref INTEGER PRIMARY KEY CLUSTERED, Join_Ref INTEGER, EnquiryDate, EnquiryType...)
CREATE TABLE Contact
(Contact_Ref INTEGER PRIMARY KEY CLUSTERED, Surname, Forenames ....)
CREATE TABLE UniversalJoin
(Join_Ref INTEGER, Contact_Ref INTEGER, Rel_Type INTEGER)
Run Code Online (Sandbox Code Playgroud)
每个查询只有一个联系人.两者之间的联系是UniversalJoin表所在
Enquiry.Join_Ref = UniversalJoin.Join_Ref AND
Rel_Type = 1 AND
UniversalJoin.Contact_Ref = Contact.Contact_Ref
Run Code Online (Sandbox Code Playgroud)
Rel_Type根据源表的不同而不同,因此在Inquiry的情况下,Rel_Type为1,但对于另一个表,它将设置为N.
我的问题是如何创建外键约束来强制实现这种关系的完整性?我想说的,但不能,是:
CREATE TABLE Enquiry
...
CONSTRAINT FK_Foo
FOREIGN KEY (Join_Ref)
REFERENCES UniversalJoin (JoinRef WHERE Rel_Type=1)
Run Code Online (Sandbox Code Playgroud) 我已经创建了一个自定义AuthorizationAttribute,我将其放在我的控制器上.我跟着这篇文章.我在OnAuthorization方法中实现了自定义授权逻辑,这很好用.当用户未通过授权时,我目前正在执行以下操作:
// if authorization check fails...
filterContext.Result = new HttpUnauthorizedResult();
Run Code Online (Sandbox Code Playgroud)
这会显示用户名/密码提示.
我的问题是,当用户未通过授权时,建议将用户发送到"访问被拒绝"类型页面的方式是什么?
我正在使用MVC3.
任何人都可以向我解释下面的C#代码行是什么吗?
public event EventHandler<DataEventArgs<BusinessEntities.Employee>> EmployeeSelected = delegate { };
Run Code Online (Sandbox Code Playgroud)
真正让我难以理解的是最后的那delegate { }一块.对于更多上下文,来自PRISM 2附带的ViewInjection示例中的EmployeesListView.xaml.cs的示例.完整的类定义如下所示:
/// <summary>
/// Interaction logic for EmployeesListView.xaml
/// </summary>
public partial class EmployeesListView : UserControl, IEmployeesListView
{
public EmployeesListView()
{
InitializeComponent();
}
public ObservableCollection<BusinessEntities.Employee> Model
{
get { return this.DataContext as ObservableCollection<BusinessEntities.Employee>; }
set { this.DataContext = value; }
}
public event EventHandler<DataEventArgs<BusinessEntities.Employee>> EmployeeSelected = delegate { };
private void EmployeesList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.AddedItems.Count > 0)
{
BusinessEntities.Employee selected = e.AddedItems[0] as …Run Code Online (Sandbox Code Playgroud) 有没有人有过VFP 到 .Net 编译器的经验或了解?
我在一家拥有广泛 VFP9 应用程序的公司工作,他们正在寻找一种快速方法来让应用程序在 .Net 中运行。我被要求检查这个编译器,看看它是否是一个可行的选项,但到目前为止我还无法让它成功编译任何东西 - 即使我的“Hello World”世界应用程序也无法运行。
只是为了限定最后一句话:我可以“编译”非常简单的 Fox 应用程序,但生成的 .Net 可执行文件无法成功执行。我已经反汇编了源代码并将其转换为 C#,但通常它包含许多错误(100 多个)。
我很想立即放弃整个技术,但是 Fox 用户社区似乎对此有很多支持和兴奋。有人对此有任何见解吗?
这是VFP 到 .Net 编译器的链接
我有ViewModel类如下:
public class ListViewModel
{
public ObservableCollection<InfoItem> List { get; set; }
}
public interface InfoItem
{
int Reference { get; }
string Name { get; }
}
Run Code Online (Sandbox Code Playgroud)
该集合按名称排序,该名称将显示在UI中.我有一个场景,其中集合包含几千个项目,我在集合中添加了一个新项目.
按名称重新排序我的集合的最有效方法是什么,以便新项目出现在列表中的正确位置?
我一直在查看PRISM 2样本,了解如何最好地处理我正在开发的新应用程序,这将是一个PRISM 2/WPF应用程序.特别关注PRISM附带的View Injection示例应用程序我注意到所有视图都实现了一个接口,允许演示者(或ViewModel)与View进行交互.
在过去,我已经完成了相反的方式,我将演示者注入到视图中,以便视图可以直接调用演示者上的方法,如下所示:
public partial class SomeView : ModuleBase
{
private ISomePresenter _somePresenter;
public SomeView (ISomePresenter somePresenter):this()
{
// Give the view a reference to the presenter
_somePresenter = somePresenter;
// Bind the View to the presenter
DataContext = _somePresenter;
}
private void btnSubmit_Click(object sender, RoutedEventArgs e)
{
// The view can call actions directly on the presenter (OK I should probably use a command for this)
_somePresenter.SomeAction();
}
}
Run Code Online (Sandbox Code Playgroud)
上面的技术对我来说似乎足够合理,但看着样本我开始质疑这种方法.最好的方法是否有人有意见(没有双关语)?
wpf ×4
mvp ×3
mvvm ×3
prism ×3
c# ×2
codeplex ×2
.net ×1
asp.net-mvc ×1
c#-3.0 ×1
command ×1
ddl ×1
delegates ×1
dto ×1
foxpro ×1
hibernate ×1
mef ×1
nhibernate ×1
performance ×1
silverlight ×1
sql-server ×1