我目前正在从UI编写ASP.Net应用程序.我正在实施一个MVP架构,因为我厌倦了Winforms,并希望能够更好地分离关注点.
因此,使用MVP,Presenter处理由View引发的事件.这是我用来处理用户创建的一些代码:
public class CreateMemberPresenter
{
private ICreateMemberView view;
private IMemberTasks tasks;
public CreateMemberPresenter(ICreateMemberView view)
: this(view, new StubMemberTasks())
{
}
public CreateMemberPresenter(ICreateMemberView view, IMemberTasks tasks)
{
this.view = view;
this.tasks = tasks;
HookupEventHandlersTo(view);
}
private void HookupEventHandlersTo(ICreateMemberView view)
{
view.CreateMember += delegate { CreateMember(); };
}
private void CreateMember()
{
if (!view.IsValid)
return;
try
{
int newUserId;
tasks.CreateMember(view.NewMember, out newUserId);
view.NewUserCode = newUserId;
view.Notify(new NotificationDTO() { Type = NotificationType.Success });
}
catch(Exception e)
{
this.LogA().Message(string.Format("Error Creating User: {0}", e.Message)); …
Run Code Online (Sandbox Code Playgroud) 我在int类型上有一个简单的扩展方法,所以我可以执行以下操作:
string timeLength = 61.ToTime() // timeLength will be "1:01"
Run Code Online (Sandbox Code Playgroud)
这在代码中很有用,但我想在Repeater模板中使用这种扩展方法.数据绑定时,我想执行以下操作:
<%# Eval("LengthInSeconds").ToTime() %>
Run Code Online (Sandbox Code Playgroud)
这没用,所以我试过:
<%# ((int) Eval("LengthInSeconds")).ToTime() %>
Run Code Online (Sandbox Code Playgroud)
它仍然无法正常工作.JIT编译器没有看到我的扩展方法,我在页面中有正确的import语句.
我解决这个问题的唯一想法是用Literal控件替换Eval并在代码隐藏中调用扩展方法,但不管怎样,我仍然想知道为什么这不起作用.
谢谢
asp.net data-binding extension-methods late-bound-evaluation
我有一个项目,我们使用屏幕DTO来封装服务层和表示层之间的数据.在我们的例子中,表示层是ASP.Net.
唯一知道DTO的类是服务层类和调用这些服务并显示DTO的Pages/Controls.
DTO几乎总是特定于页面/控件,因此我觉得它们属于表示层,但这意味着服务层必须引用表示层才能使用DTO.
我几乎认为服务层应该返回更丰富的对象(但不是域实体?)然后表示层可以获取这些对象并将它们映射到每个页面/控件关注点的非常特定的DTO.
这是一个界面声明和一个DTO,所以你可以看到我在说什么:
public interface IBlogTasks
{
BlogPostDisplayDTO GetBlogEntryByTitleAndDate(int year, int month, string urlFriendlyTitle);
}
public class BlogPostDisplayDTO
{
public string Title { get; set; }
public DateTime PostDate { get; set; }
public string HtmlContent { get; set; }
public string ImageUrl { get; set; }
public string Author { get; set; }
public int CommentCount { get; set; }
public string Permalink { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
编辑
这是另一个代码示例,用于描述不涉及Domain模型的用例.也许这会澄清一些事情.我相信我已经超载了DTO的含义.我不是在谈论DTO在线上传输物体的功能.我正在创建DTO以正式化与我的服务层之间的通信合同.
public interface IAuthenticationTasks …
Run Code Online (Sandbox Code Playgroud) 我发现我总是觉得列出所有国家及其国家代码是有用的.如果有人以多种格式提供它(例如:SQL,DDL,Xml,CSV,JSON,YAML ......).
我发现网站试图出售一系列国家,但这对我来说似乎很疯狂.有一个我忽略的开源项目吗?如果没有其他人看到任何有用的启动项目维护国家列表,甚至尝试区域层次结构的东西?
曾经有一段时间我一直想要找回加拿大一个省份的前50大城市.
哦,也许这可能是一个方便的"云"计算服务.
谢谢,我只是想确保我不会过分分析一个多年来都有一个简单解决方案的问题.
[编辑]
刚刚意识到基于社区的区域分配策略可能有点棘手.你会如何处理冲突地区?
我的很多项目都包含Castle/NHibernate/Rhino-Tools堆栈.令人困惑的是,Castle依赖于一些NHibernate库,NHibernate依赖于一些Castle库,而Rhino-Tools依赖于两者.
我已经在我的机器上构建了所有这三个项目,但我觉得复制NHibernate/Castle库有点多余,因为我使用NHibernate和Castle构建的结果库构建了Rhino-Tools.
现在,我将所有项目都包含在项目树中my/thirdparty/libs文件夹中的单独文件夹中.我应该只在项目中使用/ thirdparty/libs/rhino-tools并使用Castle/NHibernate库吗?这似乎在不重复文件方面具有逻辑意义,但我也喜欢将每个项目放在它自己的不同文件夹中.
你对此有何看法?
我在一个正在研究的项目中得到了类似下面代码的东西.我觉得我被允许这样做真的很奇怪,但是现在我开始想知道我最有可能是一个建筑师,这让我想到了这一点.
我的问题是:
这是我的界面:
namespace ThisAndThat
{
public interface ICanDoThis
{
string Do();
}
public interface ICanDoThat
{
string Do();
}
public interface ICanDoThisAndThat : ICanDoThis, ICanDoThat
{
new string Do();
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的具体课程:
namespace ThisAndThat
{
public class CanDoThisAndThat : ICanDoThisAndThat
{
public string Do()
{
return "I Can Do This And That!";
}
string ICanDoThis.Do()
{
return "I Can Do This!";
}
string ICanDoThat.Do()
{
return "I Can Do That!";
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的通过考试:
using Xunit; …
Run Code Online (Sandbox Code Playgroud) 我正在编写一个供个人使用的应用程序,它将跟踪我到达鼠标的频率,并将反击我已经没用鼠标的时间.当我使用鼠标时,我希望它可以将我的桌面工作区摇动一秒作为负强化动作.
该应用程序将被称为WristSlap,一旦我准备好0.1版本,它将在github上.
我有一个Web应用程序,它生成一个中型XML数据集,供第三方使用.
我认为为我生成的XML提供某种形式的模式文档是个好主意,所以我将XML粘贴到Visual Studio中并让它生成一个XSD.
令人讨厌的是我的XML没有验证生成的XSD!
推出自己的XSD会更好吗?
那些不同的模式文档如DTD,Relax NG或Schematron呢?
关键是我希望能够使用C#验证我的文档.
您的XML验证策略是什么?
在我工作的地方,我在不同的存储库中有几个项目.每个项目都分享了许多我想要引入不同项目的常用代码.我正在考虑使用以下方案调用该项目:Company.Department.Common或Company.Department.Utility.
我为此构建了一个项目,它有一个自动构建脚本(和其他项目一样).
我的问题是,我想重构我现有的项目,以取决于这个新项目.一个非常基本但不完全正在寻找的方法是简单地构建我的Utility项目,将DLL复制到我的消费项目中的lib文件夹,并检查该消耗项目中的DLL.
我个人觉得这种方法很差.我想引用我的Utility项目,并在构建消费项目之前执行svn-update和Build项目的构建.
仅供参考,Utlity项目中的代码类型包括Logging设施,BDD单元测试类,IoC faclities和Common Company.Department焦点类.
希望我的问题不是太模糊,但有了一些答案,我可能会把注意力集中在我想要做的事情上.
最后,这是针对.Net项目并使用NAnt作为构建脚本,并使用svn进行代码版本控制.
这是我希望拥有的域名:
public class Person
{
public int Id { get; set; }
public IList<AcquiredCertificate> AcquiredCertificates { get; set; }
}
public class AcquiredCertificate
{
public Person Acquirer { get; set; }
public Certificate Certificate { get; set; }
public DateTime DateAcquired;
}
public class Certificate
{
public int Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是我的架构:
CREATE TABLE People (
PersonId INT PRIMARY KEY
);
CREATE TABLE Certificates (
CertificateId INT PRIMARY KEY
);
CREATE TABLE CertificatesAcquiredByPeople (
PersonId INT,
CertificatedId …
Run Code Online (Sandbox Code Playgroud)