我们正在开发一个面向服务的大型多层应用程序,必须从头开始设计.现在我们需要开始编程,并尝试组装第一块砖.
问题是从哪里开始?有人建议我们应该从设计持久数据模型开始,这将提供更清晰的视图.这是一个好方法吗?
编辑为Suirtimed
这里没有太多的敏捷文化.这是一个SOA样式项目,使用WCF,SQL Server,实体框架(使用POCO生成器用于域对象),ASP MVC和Workflow Foundation.我们是一个由4名开发人员组成的团队; 技术合理(但不是专家).
architecture database-design design-patterns software-design
有没有人知道UINavigationBar如何提示?我知道它没有44px.帮助或链接到一个网站,在那里我可以看到iPhone上不同GUI元素的所有不同测量结果非常受欢迎!
我正在使用实体框架实现DAL.在我们的应用程序中,我们有三个层(DAL,业务层和演示文稿).这是一个网络应用程序.当我们开始实现DAL时,我们的团队认为DAL应该有类,其方法接收业务层上的服务给出的ObjectContext并对其进行操作.这个决定背后的基本原理是不同的ObjectContexts看到不同的DB状态,因此由于外键匹配和其他不一致的问题,一些操作可能被拒绝.
我们注意到从服务层生成和传播对象上下文会在层之间产生高耦合.因此,我们决定使用由Automapper映射的DTO(不是非托管实体或自我跟踪实体,主张高耦合,将实体暴露给上层和低效率)和UnitOfWork.所以,这是我的问题:
如果可能的话,请提供支持您答案的参考书目.
关于目前的设计:
该应用程序计划在三个层次上开发:演示,业务和DAL.业务层有外观和服务
有一个名为ITransaction的接口(只有两种处理和保存更改的方法)仅在服务中可见.为了管理事务,有一个类Transaction,它扩展了ObjectContext和ITransaction.我们已经设计了这一点,考虑到在业务层我们不希望其他ObjectContext方法可访问.
在DAL上,我们使用两个泛型类型创建了一个抽象存储库(一个用于实体,另一个用于其关联的DTO).此存储库具有以通用方式实现的CRUD方法和两个通用方法,以使用AutoMapper映射通用存储库的DTO和实体.抽象存储库构造函数将ITransaction作为参数,并且它期望ITransaction是ObjectContext,以便将其分配给其检测到的ObjectContext属性.
具体的存储库应该只接收和返回.net类型和DTO.
我们现在面临这个问题:创建的泛型方法不会为附加实体生成临时或持久ID(直到我们使用SaveChanges(),因此打破了我们想要的事务性); 这意味着服务方法无法使用它来关联BL中的DTO
c# design-patterns data-access-layer .net-4.0 entity-framework-4
我想ORDER我的所有类别和子类别的层次结构:
重点是如何从MySQL订购它们(使用POSITION字段)
MySQL代码:
CREATE TABLE IF NOT EXISTS `categories` (
`category_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`position` smallint(5) unsigned,
`parent_id` mediumint(8) unsigned NOT NULL DEFAULT '0'
PRIMARY KEY (`category_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
Run Code Online (Sandbox Code Playgroud) class Object { /* */ };
Run Code Online (Sandbox Code Playgroud)
和一些派生的:
class Derived1 : public Object { /* */ };
class Derived2 : public Object { /* */ };
Run Code Online (Sandbox Code Playgroud)
我有一个函数,它使派生对象和返回指针Object;
Object *make()
{
return new Derived1();
}
Run Code Online (Sandbox Code Playgroud)
所以,这种方式我必须通过智能指针包装返回的对象,但要使用什么返回类型?
TYPE? make()
{
return boost::shared_ptr<Derived1>(new Derived1());
}
Run Code Online (Sandbox Code Playgroud) 我有以下数组:
array(2) {
[0] => array(3) {
["submission_id"] => int(28)
["date"] => string(22) "2010-10-18 15:55:33+02"
["user_id"] => int(12)
}
[1] => array(3) {
["submission_id"] => int(37)
["date"] => string(22) "2010-11-21 16:02:07+01"
["user_id"] => int(23)
}
Run Code Online (Sandbox Code Playgroud)
我想从这个数组中只获取user_id键值.我显然可以循环它,但我想知道是否有更快的方法.
背景:
我想从一个文件中获取一些xml,将其放在模板文件中,然后将修改后的模板保存为新文件.它可以正常工作,但是当我保存文件时,我添加的所有节点都有一个预先定义的默认命名空间,即
<default:ComponentRef Id="C__AD1817F9C64A42F0A14DDDDC82DFC8D9"/>
<default:ComponentRef Id="C__157DD41D70854617A3D6D1E4A39B589F"/>
<default:ComponentRef Id="C__2E6D8662F38FE62CAFA9F8842A28F510"/>
<default:ComponentRef Id="C__54E5E2181323D4A5F37293DAA87B4230"/>
Run Code Online (Sandbox Code Playgroud)
我想要的只是:
<ComponentRef Id="C__AD1817F9C64A42F0A14DDDDC82DFC8D9"/>
<ComponentRef Id="C__157DD41D70854617A3D6D1E4A39B589F"/>
<ComponentRef Id="C__2E6D8662F38FE62CAFA9F8842A28F510"/>
<ComponentRef Id="C__54E5E2181323D4A5F37293DAA87B4230"/>
Run Code Online (Sandbox Code Playgroud)
以下是我的ruby代码:
file = "wixmain/generated/DarkOutput.wxs"
template = "wixmain/generated/MsiComponentTemplate.wxs"
output = "wixmain/generated/MSIComponents.wxs"
dark_output = Nokogiri::XML(File.open(file))
template_file = Nokogiri::XML(File.open(template))
#get stuff from dark output
components = dark_output.at_css("Directory[Id='TARGETDIR']")
component_ref = dark_output.at_css("Feature[Id='DefaultFeature']")
#where to insert in template doc
template_component_insert_point = template_file.at_css("DirectoryRef[Id='InstallDir']")
template_ref_insert_point = template_file.at_css("ComponentGroup[Id='MSIComponentGroup']")
template_component_insert_point.children= components.children()
template_ref_insert_point.children= component_ref.children()
#write out filled template to output file
File.open(output, 'w') { |f| template_file.write_xml_to f }
Run Code Online (Sandbox Code Playgroud)
我的模板文件示例:
<?xml version="1.0" …Run Code Online (Sandbox Code Playgroud) 我知道这听起来像一个愚蠢的问题,但它是为了解决一个同事和我对Silverlight的争论.
引用我的同事"我们将在Silverlight中开发......我们不会做太多.Net开发".
我的反应是声明Silverlight是.net.当然,组件的封装是不同的,但在核心,两个VM/GC都运行相同的代码.Silverlight只缺少完整.Net 4配置文件提供的大部分例程.
我的同事的论点是Silverlight有自己的一组VM/GC错误,而且所有Silverlight VM都比不那么强大的完整.Net VM更不成熟.
有没有人对此有一些答案?也许在某处有一些文件?如果我错了,我会承认的.但我找不到任何说我错的东西.
如何在Windows下模拟iPad浏览器?我知道用户代理字符串,我知道浏览器宽度/高度,屏幕宽度/高度
假设每次用户按下ID为"txt"的textarea中的键时,我都会调用以下jQuery的Web应用程序:
$('#txt').keydown(function(e) {
console.log(e.which); // shows the keyCode
console.log(e.shiftKey);
}
Run Code Online (Sandbox Code Playgroud)
在桌面浏览器上,对于像(和这样的字符9,我可以通过检查是否按住shift键来区分两者(使用e.shiftKey).但是,在Safari for iPad中,键入这些字符不需要Shift键.因此,例如,按下iPad键盘上的两个键(并9在keyCode的控制台中记录"57".为e.shiftKey记录的值始终显示为false.
我如何能够可靠地区分在iPad上键入移位字符?提前致谢!