在典型的软件开发中,通常会使用分层架构来组织代码,其中包括Service层和Dao层。以下是对这些术语的解释:
-
UserServiceImpl:这是一个Service层的实现类,通常负责处理与用户相关的业务逻辑。Service层位于应用程序的业务逻辑层,它与用户界面(如Web界面或移动应用程序界面)和数据访问层(Dao层)之间进行通信。UserServiceImpl类包含了具体的业务逻辑和处理方法,比如用户注册、登录、权限控制等。
-
IUserDao:这是一个Dao层的接口类,通常定义了与用户数据持久化存储相关的操作方法。Dao层位于应用程序的数据访问层,负责与数据库进行交互,并执行数据的CRUD操作(创建、读取、更新、删除)。IUserDao接口中声明了用户数据操作的方法,如添加用户、查询用户、更新用户信息等。
-
UserDaoImpl:这是一个Dao层的实现类,实现了IUserDao接口中定义的方法,具体执行与用户数据存取相关的操作。UserDaoImpl类通常包含了与具体数据库交互的代码,如执行SQL语句、调用ORM框架等。
Service层和Dao层的关系是协作关系,它们之间通过接口和实现类进行交互。一般来说,Service层调用Dao层提供的方法来访问和操作数据,而Dao层则负责具体的数据库操作。这种分层架构可以带来代码结构清晰、耦合度低、易于维护等优势。
在没有使用 IoC 思想的情况下,Service 层想要使用 Dao 层的具体实现的话,需要通过 new 关键字在UserServiceImpl
中手动 new 出 IUserDao
的具体实现类 UserDaoImpl
(不能直接 new 接口类IUserDao)。
开发过程中突然接到一个新的需求,针对IUserDao
接口开发出另一个具体实现类。因为 Server 层依赖了IUserDao
的具体实现,所以我们需要修改UserServiceImpl
中 new 的对象。如果只有一个类引用了IUserDao
的具体实现,可能觉得还好,修改起来也不是很费力气,但是如果有许许多多的地方都引用了IUserDao
的具体实现的话,一旦需要更换IUserDao
的实现方式,那修改起来将会非常的头疼。
使用 IoC 的思想,我们将对象的控制权(创建、管理)交有 IoC 容器去管理,我们在使用的时候直接向 IoC 容器 “要” 就可以了