假设您有一个分为3层的应用程序:GUI,业务逻辑和数据访问.在业务逻辑层中,您已经描述了业务对象:getters,setter,accessors等等......你明白了.业务逻辑层的接口保证了业务逻辑的安全使用,因此您调用的所有方法和访问器都将验证输入.
当您第一次编写UI代码时,这非常棒,因为您可以信任一个整齐定义的界面.
但是这里有一个棘手的部分,当你开始编写数据访问层时,业务逻辑的接口无法满足你的需求.您需要有更多的访问器和getter来设置隐藏/曾经隐藏的字段.现在你被迫侵蚀了业务逻辑的界面; 现在可以从UI层设置字段,UI层没有业务设置.
由于数据访问层所需的更改,业务逻辑的接口已经被侵蚀到甚至可以使用无效数据设置业务逻辑的程度.因此,界面不再保证安全使用.
我希望我能够清楚地解释这个问题.如何防止接口侵蚀,维护信息隐藏和封装,还能满足不同层之间不同的接口需求?
感谢FireFox对ActiveX组件的错误实现(打印时真的应该拍摄它们的图像)Flex组件(在我们的例子图表中)不能在FX中打印.
它们在IE7中打印得很好,甚至是IE6.
我们需要打印这些图表,但它们也有动态内容.当用户打印时,我真的不想再将它们作为图像绘制 - Flex组件应该这样做.
我们已经找到了一个潜在的解决方法,但不幸的是它在FireFox3中不起作用(在FireFox2中它有点可行,但还不够好).
有人知道解决方法吗?
任何人都有一个脚本或别名来查找Perforce树中未跟踪(真的:未添加)的文件?
编辑:我更新了这个问题的答案,因为看起来P4V在2009年1月的版本中增加了对此的支持.
我在Visual Studio中编写一个报表,它接受用户输入参数并针对ODBC数据源运行.我想手动编写查询并让报告服务将where子句的一部分替换为参数值,然后再将其发送到数据库.似乎正在发生的事情是@parmName我假设将被替换实际上是作为SQL语句的一部分发送的.我错过了某处的配置设置或者这根本不可能吗?
我没有在工具中使用过滤器选项,因为这似乎从数据库中带回完整数据集并在SQL Server上进行过滤.
sql-server odbc sql-server-2008 visual-studio reporting-services
我非常喜欢Winscp中的Keep Remote Directory最新功能.不幸的是,我在OS X或Linux中找不到任何简单易用的东西.我知道理论上可以使用changedfiles或rsync完成同样的事情,但我总是发现这两个工具的教程缺乏和/或相互矛盾.
我基本上只需要一个在OSX或Linux中工作的工具,并在我更改本地目录时保持远程目录与本地目录同步(镜像).
更新
通过解决方案,我看到一对解决了手动保持远程目录与本地目录同步的一般问题.我知道我可以设置一个cron任务来每分钟运行rsync,这应该非常接近实时.
这不是我正在寻找的确切解决方案,因为winscp执行此操作以及更多:它检测目录中的文件更改(当我处理它们时),然后自动将更改推送到远程服务器.我知道这不是最好的解决方案(没有代码存储库),但它允许我在开发它时非常快速地在服务器上测试代码.有谁知道如何结合rsync与任何其他命令来获得此功能?
我想通过使用该map()函数来过滤项目数组.这是一段代码:
var filteredItems = items.map(function(item)
{
if( ...some condition... )
{
return item;
}
});
Run Code Online (Sandbox Code Playgroud)
问题是过滤掉的项目仍然使用数组中的空间,我想完全消除它们.
任何的想法?
编辑:谢谢,我忘了filter(),我想要的实际上是filter()一个map().
EDIT2:感谢您指出map()并且filter()并未在所有浏览器中实现,尽管我的特定代码并不打算在浏览器中运行.
javascript functional-programming client-side data-manipulation
我在Internet Explorer 7中遇到问题.
当我有一个包含两个或更多 的表单input[type=text]并按Enter键时,事件按以下顺序发生:
onClick)onSubmit)示例代码:
<form onSubmit="{alert('form::onSubmit'); return false;}">
<input type="text">
<input type="text">
<input type="submit" onClick="{alert('button::onClick');}">
</form>
Run Code Online (Sandbox Code Playgroud)
如果我只有一个 input[type=text]而且我按下输入提交按钮onClick事件不会触发.示例代码:
<form onSubmit="{alert('form::onSubmit'); return false;}">
<input type="text">
<input type="submit" onClick="{alert('button::onClick');}">
</form>
Run Code Online (Sandbox Code Playgroud) 如何在C#中使用Regex检索所选文本?
我正在寻找与此Perl代码等效的C#代码:
$indexVal = 0;
if($string =~ /Index: (\d*)/){$indexVal = $1;}
Run Code Online (Sandbox Code Playgroud) 注意:这是在我开始使用C#时发布的.凭借2014年的知识,我可以真正地说,自动属性是C#语言中发生过的最好的事情.
我习惯使用私有和公共字段在C#中创建我的属性:
private string title;
public string Title
{
get { return title; }
set { title = value; }
}
Run Code Online (Sandbox Code Playgroud)
现在,使用.NET 3.0,我们获得了自动属性:
public string Title { get; set; }
Run Code Online (Sandbox Code Playgroud)
我知道这更像是一个哲学/主观问题,但除了为每个字段保存五行代码之外,是否有任何理由使用这些自动属性?我个人的抱怨是那些属性隐藏了我的东西,我不是黑魔法的忠实粉丝.
事实上,隐藏的私有字段甚至没有显示在调试器中,这是好的,因为get/set函数什么都不做.但是当我想实际实现一些getter/setter逻辑时,我必须使用私有/公共对.
我看到了我节省大量代码(一对六行)而不会失去以后更改getter/setter逻辑的能力的好处,但是我再次通过简单地声明一个公共字段"Public string Title"就可以做到这一点需要{get; 组; 阻止,因此甚至可以节省更多代码.
那么,我在这里错过了什么?为什么有人真的想要使用自动属性?
我有一个.NET 2.0 Windows窗体应用程序,它大量使用该ListView控件.
我已经将ListView类子类化为一个模板化的SortableListView<T>类,因此它可以更明智地表示它如何显示事物并对其进行排序.
不幸的是,这似乎打破了VS2005和2008中的Visual Studio Forms Designer.
该程序编译并运行正常,但当我尝试在设计器中查看拥有的表单时,我得到这些错误:
没有可用于此错误的堆栈跟踪或错误行信息
在MyApp.Main.Designer.cs行:XYZ列:1
Call stack:
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.Error(IDesignerSerializationManager manager, String exceptionText, String helpLink)
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManager manager, String name, CodeExpression expression)
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManager manager, String name, CodeExpression expression)
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeStatement(IDesignerSerializationManager manager, CodeStatement statement)
Run Code Online (Sandbox Code Playgroud)
有问题的代码行是它实际添加到表单的位置,而且是
this.imagesTab.Controls.Add( this.listViewImages );
Run Code Online (Sandbox Code Playgroud)
listViewImages声明为
private MyApp.Controls.SortableListView<Image> listViewImages;
Run Code Online (Sandbox Code Playgroud)
并在InitializeComponent方法中实例化如下:
this.listViewImages = new MyApp.Controls.SortableListView<Image>();
Run Code Online (Sandbox Code Playgroud)
正如前面提到的,程序编译和运行完美,我已经尝试将SortableListView类转换为单独的程序集,因此它可以单独编译,但这没有区别.
我不知道从哪里开始.任何帮助,将不胜感激!
c# ×3
.net ×2
javascript ×2
apache-flex ×1
architecture ×1
client-side ×1
events ×1
firefox ×1
linux ×1
macos ×1
odbc ×1
perforce ×1
perl ×1
regex ×1
sftp ×1
sql-server ×1
ssh ×1
winforms ×1