这样使用AOP是否合理

         情况如下:现在有一个User的逻辑处理组件,该组件提供基础的用户处理功能;但后期在写一个Blog的逻辑组件其中包括用户基础的扩展,当用户添加时要在Blog功能的某个表里添加信息;从设计原则来说是不应该修改User组件的里添加用户方法把Blog基础信息加入。那这个时候到底是在Blog组件里新做一个用户添加逻辑方法来把功能整合,还是在Blog组件用AOP功能把User组件添加用户的方法进行拦载切入功能比较合理呢?

    [NClay.Services.AspectContainer]

    public class UserServiceAspect

    {

        [NClay.Services.Aspect(typeof(Users.IUserService))]

        public void Create(User user)

        {

            using (TransactionContext tc = new TransactionContext())

            {

                MethodContext.Invoke(user);

                UserSubInfo info = new UserSubInfo();

                info.UserID = user.UserID;

                DaoContext.Add(info);

                tc.Commit();

            }

        }

        [NClay.Services.Aspect(typeof(Users.IUserService))]

        public void Delete(string[] userid)

        {

            using (TransactionContext tc = new TransactionContext())

            {

                MethodContext.Invoke(userid);

                ModelContext.UserSubInfo.UserID.In(userid).Delete<UserSubInfo>();

                tc.Commit();

            }

        }

    }

到底在什么场合下应该怎样做呢?设计这东西总是真是很难把握,一旦设计者的执著就有可能此引发一些设计上的问题,而这些问题往往在后期修改或扩展才能体现出来。

大家发表一下各自意见来讨论一下。

posted on 2008-08-13 23:29  henry  阅读(2095)  评论(7编辑  收藏  举报

导航