Naked objects 起步(v6,v7)
2017-06-10 11:09
106 查看
Naked Objects 新手尝试这个简单的示例: 编写你的第一个 Naked Objects 应用程序。然后你就可以稍正式一点的内容。
Naked Objects应用程序通常由多个项目组成。
首先,通常有一个或多个 ‘Model’项目,用于存放领域类,参考:
创建领域模型项目
其次你需要一个或多个 ‘Run’ 项目。如果你准备创建用户界面,你就添加 MVC 项目。参考:
Naked Objects MVC应用程序项目上运行领域模型
过后你可能决定加个 Restful API,作为备选方案 ‘运行’ 领域模型:
创建并使用Restful Objects API
或者运行在独立的可执行程序程序上,批量操作的示例:
无用户界面运行
同样添加一个或多个测试项目。 可以是传统的单元测试,但我强烈推荐你考虑强大的 Naked Objects XAT 框架来编写界面无关的功能或测试:
可运行应用程序测试 (XATs)
如果你坚持使用 Naked Objects MVC 生成的用户界面 (基本不会有变化)则通常不需要编写界面测试。但如果是自定义的用户界面 (除只改动 CSS外) 你就要写界面测试了。 我们写了一些Selenium 框架的帮助类,参考:
使用 Selenium结束最终测试
使用Visual Studio 2013 (Express 版本即可) 创建一个名称为MyWebApp的 ASP.NET Web Application 项目,使用 MVC 模板。
安装 NuGet 包 NakedObjects.Mvc-FileTemplates,选择 Yes To All 同意覆盖现有文件。
在Models文件里创建一个和下边一样的 Customer 类。注意:
Naked Objects 应用程序中的所有属性必须为 virtual。
[Hidden] 指出哪些属性不需要显示在界面上。
[Title] 指出哪属性的值显示Tab上。
创建如下DbContext对象 (标准Entity Framework Code First 编码。)
App_Start 目录中找到 RunWeb 类编辑如下两个成员。类与编辑的成员如下。首先, MenuServices 属性定义主菜单的显示服务。(NakedObjects.Services.SimpleRepository 是一个现有类只用于原有的协议。)
其次, 我们需要在DbContext(s) 中指出需要的持久属性:
运行项目。使用Customers 菜单里的动作,尝试创建和返回Customer 对象。
该手册并不试图提供 Entity Framework Code First 开发的介绍 - 而只是强调程序中与 Naked Objects 结合的部分。因此建议了解一下 Entity Framework Code First 开发:网上有许多教程,我们强烈推荐 Julia Lerman 和Rowan Millar写的书《Programming Entity Framework - Code First 》
考备在线教程示例中提到的领域代码时,要记住以下规则:
Naked Objects 要求所有的属性为 virtual。
Naked Objects 要求所有的集合为 virtual,并已初始化 (非构造函数)。见 集合属性。
Entity Framework Code First 所有属性在数据库都是可空的,除非强行指定 (使用 Required 属性,或通过 Code First Fluent API)。然而Naked Objects framework对待用户界面 (Naked Objects MVC) 或 Restful API (.NETRestful 对象) 的属性都是要求有值的,除非标记了Optionally 属性 - 我们认为这种默认的行为更加安全。 Naked Objects 可以通过其它方式进行配置只要你想 (见 Optional vs. Required)。
创建校报的 Class Library 项目。
打开 NuGet 包管理,找到
添加POCO领域类,接着用Naked Objects 框架组织简单的编程协议。 见 领域对象
创建Repositories/Factories之类的服务。
这个上下文继承
不必为每个领域类分别定义一个
用 Code First 'Fluent API'创建数据库映射。使用 Naked Objects > DbMapping 模板快速创建类。
添加数据库初始化确定何时/是否删除和重新架构。使用 Naked Objects > DbInitialiser 模板项快速创建初始化类。你可以用初始化器生成数据库,但你得考虑作为备选方案-使用 Naked Objects自有数据结构模式有许多优点。
自定义数据库初始化器要设置运行类的
另一可选方式是使用Naked Objects 自有的数据组件模式,其优点是你可以委托服务或对对象里的方法来创建,就得用户自己创建的一样。
创建一个新的C# ASP.NET Web Application 项目,,选择 MVC 模板,并设为启动项目。
打 Nuget 包管理器,找到
添加模型项目的引用。
将模型项目中
标准MVC项目中有两个
打开
本地运行项目。运行后会在浏览器中打开程序中起始页面。
即使你选择 Internet 项目模板,默认情况下,应用程序初始设置里也不要求登录。当你往协议中添加验证时,只是简单把
当你准备就绪,程序就可以布置到IIS上运行, ASP.NET MVC 也是一样。最简单的方式就是右击项目,点击发布。
Naked Objects应用程序通常由多个项目组成。
首先,通常有一个或多个 ‘Model’项目,用于存放领域类,参考:
创建领域模型项目
其次你需要一个或多个 ‘Run’ 项目。如果你准备创建用户界面,你就添加 MVC 项目。参考:
Naked Objects MVC应用程序项目上运行领域模型
过后你可能决定加个 Restful API,作为备选方案 ‘运行’ 领域模型:
创建并使用Restful Objects API
或者运行在独立的可执行程序程序上,批量操作的示例:
无用户界面运行
同样添加一个或多个测试项目。 可以是传统的单元测试,但我强烈推荐你考虑强大的 Naked Objects XAT 框架来编写界面无关的功能或测试:
可运行应用程序测试 (XATs)
如果你坚持使用 Naked Objects MVC 生成的用户界面 (基本不会有变化)则通常不需要编写界面测试。但如果是自定义的用户界面 (除只改动 CSS外) 你就要写界面测试了。 我们写了一些Selenium 框架的帮助类,参考:
使用 Selenium结束最终测试
编写第一个Naked Objects 应用程序
接下来的几个步骤用于编写第一个极简单的Naked Objects应用程序,功能上只有一个简单的领域类:使用Visual Studio 2013 (Express 版本即可) 创建一个名称为MyWebApp的 ASP.NET Web Application 项目,使用 MVC 模板。
安装 NuGet 包 NakedObjects.Mvc-FileTemplates,选择 Yes To All 同意覆盖现有文件。
在Models文件里创建一个和下边一样的 Customer 类。注意:
Naked Objects 应用程序中的所有属性必须为 virtual。
[Hidden] 指出哪些属性不需要显示在界面上。
[Title] 指出哪属性的值显示Tab上。
using NakedObjects; namespace MyWebApp { public class Customer { [Hidden] public virtual int Id { get; set; } [Title] public virtual string Name { get; set; } } }
创建如下DbContext对象 (标准Entity Framework Code First 编码。)
using System.Data.Entity; namespace MyWebApp { public class MyDbContext : DbContext { public DbSet<Customer> Customers { get; set; } } }
App_Start 目录中找到 RunWeb 类编辑如下两个成员。类与编辑的成员如下。首先, MenuServices 属性定义主菜单的显示服务。(NakedObjects.Services.SimpleRepository 是一个现有类只用于原有的协议。)
protected override IServicesInstaller MenuServices { get { return new ServicesInstaller( new SimpleRepository<Customer>()); } }
其次, 我们需要在DbContext(s) 中指出需要的持久属性:
protected override IObjectPersistorInstaller Persistor { get { var installer = new EntityPersistorInstaller(); installer.UsingCodeFirstContext(() => new MyDbContext()); return installer; } }
运行项目。使用Customers 菜单里的动作,尝试创建和返回Customer 对象。
创建领域模型项目
Naked Objects 使用微软的 Entity Framework 将领域对象持久化到数据库中。大部分使用Entity Framework开发者现在使用 ‘Code First’ 模式- 并且这一模式贯穿整个手册。命名略有偏题: ‘Code First’ 模式也可用在现有数据库上 – ‘Code First’ 只是意味着持久化完全定义在程序代码里 (通常为 C#)。 Naked Objects 在Entity Franework 旧模式式下也一样运行良好,即实体定义在 .edmx 结尾的xml文件里。该手册并不试图提供 Entity Framework Code First 开发的介绍 - 而只是强调程序中与 Naked Objects 结合的部分。因此建议了解一下 Entity Framework Code First 开发:网上有许多教程,我们强烈推荐 Julia Lerman 和Rowan Millar写的书《Programming Entity Framework - Code First 》
考备在线教程示例中提到的领域代码时,要记住以下规则:
Naked Objects 要求所有的属性为 virtual。
Naked Objects 要求所有的集合为 virtual,并已初始化 (非构造函数)。见 集合属性。
Entity Framework Code First 所有属性在数据库都是可空的,除非强行指定 (使用 Required 属性,或通过 Code First Fluent API)。然而Naked Objects framework对待用户界面 (Naked Objects MVC) 或 Restful API (.NETRestful 对象) 的属性都是要求有值的,除非标记了Optionally 属性 - 我们认为这种默认的行为更加安全。 Naked Objects 可以通过其它方式进行配置只要你想 (见 Optional vs. Required)。
定义模型项目
你的起始点是开发一个或多个模型项目,如下:创建校报的 Class Library 项目。
打开 NuGet 包管理,找到
NakedObjects.ProgrammingModel包并安装 (见下边 Naked Objects IDE部分)。
添加POCO领域类,接着用Naked Objects 框架组织简单的编程协议。 见 领域对象
创建Repositories/Factories之类的服务。
Naked Objects IDE
如果你通过 NuGet Package Manager安装NakedObjects.ProgrammingModel,NakedObjects.Ide 包会自动安装,这里边有一组模板项及代码片段来帮助你构建领域对象模型。棋牌项用于 Add > New Item:你在C#编程语言下边的 Naked Objects 里的列表里找到这些模板。查看代码片断列表: Tools > Code Snippets Manager > [Language] > My Code Snippets > Naked Objects。大部分都可以使用快捷方式,像 'propcho' 添加一个属性的 Choices 方法。不过,如安装其它工具像Resharper,这些快捷方式可能不起作用。IDE被替换成自有包因此有些项目中你可以选择卸载 NakedObjects.ProgrammingModel ,无论你是否想卸载 IDE,多个项目都可以用。定义 DbContext
接下来你需要在项目中设置一个 'Context'类 ,项目定义和 Code First 开发协议一致。你可以使用 Naked Objects > DbContext 模板项帮助创建这个类 - 示例如下 :namespace DataAccess { public class MyContext : DbContext { public MyContext(string name) : base(name) { } public MyContext() { } public DbSet<Foo> Foos { get; set; } public DbSet<Bar> Bars { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { //Initialisation //Use the Naked Objects > DbInitialiser template to add a custom initialiser, then reference thus: Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MyContext>()); //Mappings //Use the Naked Objects > Mapping template to add mapping classes & reference them thus: //modelBuilder.Configurations.Add(new Employee_Mapping()); } } }
这个上下文继承
System.Data.Entity.DbContext类,其定义一些方法返回一个或多个
DbSets。
不必为每个领域类分别定义一个
DbSet- 只要定义模型层次中根类。
OnModelCreating方法中你可以这样:
用 Code First 'Fluent API'创建数据库映射。使用 Naked Objects > DbMapping 模板快速创建类。
添加数据库初始化确定何时/是否删除和重新架构。使用 Naked Objects > DbInitialiser 模板项快速创建初始化类。你可以用初始化器生成数据库,但你得考虑作为备选方案-使用 Naked Objects自有数据结构模式有许多优点。
重载默认数据库架构生成
默认情况下, Entity Framework Code First 创建数据库遵循基于类和属性名称的一组约定。这些基于约定的架构可能需要精简和提高,领域类里使用 Code First 数据注解,或使用 Code First Fluent API来解释也是一样。后者是创建一个或多个配置类来实现 (继承于EntityTypeConfiguration<T>) 并在
DbContext中引用,示例如下(引用自Julia Lerman 和Rowan Millar的《Programming Entity Framework - Code First》):
namespace DataAccessFluent { public class DestinationConfiguration : EntityTypeConfiguration<Destination> { public DestinationConfiguration() { Property(d => d.Name).IsRequired(); Property(d => d.Description).HasMaxLength(500); Property(d => d.Photo).HasColumnType("image"); } } namespace DataAccessFluent { public class DestinationConfiguration : EntityTypeConfiguration<Destination> { public DestinationConfiguration() { Property(d => d.Name).IsRequired(); Property(d => d.Description).HasMaxLength(500); Property(d => d.Photo).HasColumnType("image"); } } public class LodgingConfiguration : EntityTypeConfiguration<Lodging> { public LodgingConfiguration() { Property(l => l.Name).IsRequired().HasMaxLength(200); Property(l => l.Owner).IsUnicode(false); Property(l => l.MilesFromNearestAirport).HasPrecision(8, 1); } } //... public class BreakAwayContextFluent : DbContext { public BreakAwayContextFluent(string name) : base(name) { } public BreakAwayContextFluent() { } public DbSet<Destination> Destinations { get; set; } public DbSet<Lodging> Lodgings { get; set; } //... protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Configurations.Add(new DestinationConfiguration()); modelBuilder.Configurations.Add(new LodgingConfiguration()); // ... } } }
数据设备和 Code First
使用Code First时,有个可选项用于创建数据组件 (预填充数据库) 即通过数据库初始化器的Seed方法。
示例如下(引用自Julia Lerman 和Rowan Millar的《Programming Entity Framework - Code First》):
namespace DataAccess { public class DropCreateBreakAwayWithSeedData : DropCreateDatabaseAlways<BreakAwayContext> { protected override void Seed(BreakAwayContext context) { context.Destinations.Add(new Model.Destination { Name = "Great Barrier Reef" }); context.Destinations.Add(new Model.Destination { Name = "Grand Canyon" }); //... } } }
自定义数据库初始化器要设置运行类的
Persistor属性,如前边的节里所述,或 DbContext的
OnModelCreating()方法里设置。
另一可选方式是使用Naked Objects 自有的数据组件模式,其优点是你可以委托服务或对对象里的方法来创建,就得用户自己创建的一样。
作为Naked Objects MVC 应用程序运行领域模型
下边的步骤运行领域模型使用 Naked Objects MVC 用户界面。创建一个新的C# ASP.NET Web Application 项目,,选择 MVC 模板,并设为启动项目。
打 Nuget 包管理器,找到
NakedObjects.Mvc-FileTemplates包并安装。
添加模型项目的引用。
将模型项目中
App.config文件里的连接字符串考备到运行项目的
Web.config中。
标准MVC项目中有两个
web.config文件 - 一个在 Views 文件夹里 (防止不经过控制器直接访问视图) 而另一个在项目根目录下。连接字符串后边会用到。
打开
RunWeb类 (在
App_Start目录里)。在这个运行类里,注册服务,组件 (有必要的话),及对默认运行配置进行必要的修改。
本地运行项目。运行后会在浏览器中打开程序中起始页面。
即使你选择 Internet 项目模板,默认情况下,应用程序初始设置里也不要求登录。当你往协议中添加验证时,只是简单把
GenericController和
SystemController两类的的
[Authorize]前边的注释去掉。
当你准备就绪,程序就可以布置到IIS上运行, ASP.NET MVC 也是一样。最简单的方式就是右击项目,点击发布。
相关文章推荐
- Naked objects(v8.x) 起步
- arm处理器中a5 a8 a9,v6 v7,arm7 arm9 arm11都是依据什么来分类的
- 揭开芯面纱 主流平板电脑方案深度剖析之ARMv5,v6,v7架构阵营
- arm处理器中a5 a8 a9,v6 v7,arm7 arm9 arm11都是依据什么来分类的【转】
- Spring MVC 起步
- NotePad++不打开上次关闭的文件 V7.5.3
- Android Studio报错Failed to resolve:com.android.support:appcompat-v7
- vue_1.起步
- git 起步
- PictureViewer for mac(图片浏览) V7.0.2 破解版
- 并查集之起步
- 机器学习起步-k-最近邻算法
- EasyDemo*android studio报错Failed to resolve:com.android.support:appcompat-v7 实用解决办法
- LinkAssistant for Mac(SEO软件) v6.12.1 破解版
- 从零打造在线网盘系统之Hibernate框架起步
- 向所有CSDN上的朋友推荐一个万能播放器(Media Player Classic v6.4.7.6 汉化版)
- 万事开头难...起步...
- 最经典的Java起步
- JNI起步
- 我的软件开发经历(一)——起步篇