强大的EA该让我如何说起

      从个人版开始我就开始使用EA,然而当时刚接触的时候还真是觉得这个工具并不人性化,又不好使用,所以个人版的图画的是真心不如意。不过用的时间久了,发现EA是真心强大的工具。下面我多EA的强大功能的总结就从数据库设计开始吧。

      合作开发时间紧任务急,所以在统一了系统功能后,其他组员分别负责需求分析文档和画界面,我的任务就是建立数据库,其实在一开始的时候我也是知道EA具有画表的功能,只是当时并没有运用,数据库代码就是自己写的,所以这次觉得好好尝试下用EA建数据库。

     首先打开EA,创建项目,添加一个包命名为表,这都是最基础的操作就不多做介绍,将table拖入到操作区域,,对标进行命名,添加表名称,和构造类型,(作者部分是自己添加的),在数据库选项中可以选择要生成代码的数据库类型,在这里我选择了sql server 2008(生成代码时需要)如图所示:

           然后是字段的添加:名称即是字段的名称,可以选择主键,或者是否为空,数据类型可以根据需要进行选择,数据库中有的数据类型这里都具备,在这里最主要的还是想说初始,初始值可以自己设置,我是设置了默认值自动获得日期。(还可以对卡进行别名和备注的书写)

      既然可以选择是否作为主键,那么必然就可以设置外键,那么该如何设置呢,设置成功后的样子如图所示:

   那么是如何创建呢,其实很简单只要连接两个表,然后右键,选择外键即可。

   我们从创建的表可以看出,有红色部分和蓝色部分,是为什么有这样的区别呢,根据经验我们可以得知上面的部分为属性,下面的部分为方法。所以这里将创建主键设置为一个方法,所以这样说我们的创建存储过程,视图,触发器等是不是也可以在这里创建呢?果然不出所料,添加方法可以得出(如图所示可以穿件不同的构造类型):

        现在真个表穿件的差不多了,那么将要做的就是如何将创建的表导出为sql语句呢,右键可得导出为sql,界面如图:可以选择创建主键,生成索引,触发器等都可以,还可以单个生成或者是生成一个表的sql语句,生成的代码可以直接在sql中运行创建一个完整的数据库了,这里就不展示数据库代码了。

       除了创建表示这次运用的新功能外,还发现上次的一个错误,就是在创建实体类的时候对EA的运用,似乎出了些问题,其实也就是对EA的功能不熟悉造成的,我们先看下我两次画的图有什么不同:

    其实看上去似乎没有多大差别,到那时明显后面的上多了property,我想不用我说大家都摘掉property代表着什么,这是我们在VB.NET中声明属性的时候用的关键字,那么显然第一张图和普通的类没有什么区别,固然不会自动生成实体。那么这个差别是如何形成的呢?其实只要再属性创建时勾选属性选型,再将弹出框中的名称进行修改便可以得到实体的属性字段!(如图所示:)

   

      那么我们来看一下这两种形式的图,生成的代码有什么样的区别:(选取部分代码)

第一种图的代码,显然将实体的属性定义为方法不合理:

Private enUserName As String
		''' <summary>
		''' 用户状态
		''' </summary>
		Private enUserStatus As String

		''' <summary>
		''' 级别
		''' </summary>
		Public Function Level() As String
			Level = ""
		End Function

		''' <summary>
		''' 新密码
		''' </summary>
		Public Function NewPwd() As string
			NewPwd = ""
		End Function

第二种图的代码,则是我们想要的,开始我以为办不到,原来是因为我没有好好研究:

	''' <summary>
		''' 用户名
		''' </summary>
		Private enUserID As String
		''' <summary>
		''' 用户姓名
		''' </summary>
		Private enUserName As String

		''' <summary>
		''' 用户级别
		''' </summary>
		Public Property Level() As String
			Get
				Return enLevel
			End Get
			Set(ByVal Value as String)
				enLevel = Value
			End Set
		End Property

		''' <summary>
		''' 用户状态
		''' </summary>
		Public Property LoginStatus() As String
			Get
				Return enLoginStatus
			End Get
			Set(ByVal Value as String)
				enLoginStatus = Value
			End Set
		End Property


       第三个让我觉得厉害的地方,就是关于类实现接口,类继承于抽象类等的功能,开始觉得这个没有办法体现出来,所以生成的代码必然也不会是我想要的,然而事实却远非我想的那样,EA远比我想的强大,先拿DAL和IDAL来说这个问题,因为DAL的所有方法基本都是实现的IDAL,所以大致方法一样,当初我想的是如果只画IDAL,用实现的箭头连接,那么DAL中就会出现IDAL的方法,就会节约时间,而且也不会担心我会忘记方法,所以就在工厂里,添加了两个包的链接,将各包重的类以链接的方式放在工厂里,然后用DAL实现IDAL,果然不出我所料,接口的方法都会复制到DAL中,而且在代码中也会有体现:下面是图和代码:


    IDAL的代码:(代码太多只展示部分)

	''' <summary>
	''' 用户信息表的修改
	''' </summary>
	Private Interface IUser


		''' <summary>
		''' 添加新用户方法
		''' </summary>
		''' <param name="enUser"></param>
		Function AddUser(ByVal enUser As UserEntity) As Integer

		''' <summary>
		''' 修改用户密码   修改密码时需要
		''' </summary>
		''' <param name="enUser"></param>
		Function ChangePwd(ByVal enUser As UserEntity) As Integer

		''' <summary>
		''' 删除用户(需要判断要删除用户是否处于登录状态)
		''' </summary>
		''' <param name="strUserId"></param>
		Function DeleteUser(ByVal strUserId As String) As Integer


   最让我感到满意的就是DAL的代码,完全是按照实现接口的方法显示的:             

Imports Model.机房收费系统.Entity
Imports Model.机房收费系统.IDAL

Namespace 机房收费系统.DAL
	''' <summary>
	''' 用户信息  登录时使用 继承与IUser
	''' </summary>
	Public Class UserDAL
		Implements 机房收费系统.IDAL.IUser


		''' <summary>
		''' 添加新用户方法  参数还未确定
		''' </summary>
		''' <param name="enUser"></param>
		Public Function AddUser(ByVal enUser As UserEntity) As Integer Implements IUser.AddUser
			AddUser = 0
		End Function

		''' <summary>
		''' 修改用户密码   修改密码时需要
		''' </summary>
		''' <param name="enUser"></param>
		Public Function ChangePwd(ByVal enUser As UserEntity) As Integer Implements IUser.ChangePwd
			ChangePwd = 0
		End Function

		''' <summary>
		''' 删除用户(需要判断要删除用户是否处于登录状态)
		''' </summary>
		''' <param name="strUserId"></param>
		Public Function DeleteUser(ByVal strUserId As String) As Integer Implements IUser.DeleteUser
			DeleteUser = 0
		End Function


       由代码可以看出,包括DAL对实体的引用对IDAL的引用都可以在代码中完全展示,不得不让我惊喜,更是让我觉得工具真心强大。

        EA的功能暂时只觉得这些是值得我弄明白的,当然看上去还有很多我没有弄清楚的功能在等待我的挖掘,唯一让我不满的的是每一个类都在一个命名空间里,不知道这样是为了安全还是什么,但是觉得调用的时候不方便,而且在把代码导入到VS后会出现一些因为命名空间和引用的问题,暂时没有想到好的解决办法,(很大可能是因为我建的包不合理的问题)。



  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 30
    评论
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值