【问题标题】:Which architecture should be followed while developing WCF Service application?开发 WCF 服务应用程序时应遵循哪种架构?
【发布时间】:2011-06-11 16:46:01
【问题描述】:

我正在开发 windows phone 7 应用程序。我正在使用 XML 文件来存储和检索 windows phone 7 应用程序的数据。在我的应用程序中,我为当前的 windows phone 7 应用程序创建了类库。我当前的应用程序有 'CoreClassLayer' 、 'DataAccessLayer' 和 'BusinessLayer' 实验室。在 CoreObjectLayer 类库中,我将以下代码用于一个类,如下所示(例如 Category 类)

public class Category
    {
        public int ID { get; set; }
        public String Name { get; set; }
        public int TransactionType_ID { get; set; }

        public Category()
        {
        }

        public Category(int ID, String Name, int TransactionType_ID)
        {
            this.ID = ID;
            this.Name = Name;
            this.TransactionType_ID = TransactionType_ID;
        }

        public Category(XElement xElement)
        {
            ID = Convert.ToInt32(xElement.Element("ID").Value.ToString());
            Name = xElement.Element("Name").Value;
            TransactionType_ID = Convert.ToInt32(xElement.Element("TransactionType_ID").Value.ToString());
        }

        public XElement Information
        {
            get
            {
                return new XElement("Category",
                        new XElement("ID", ID),
                        new XElement("Name", Name),
                        new XElement("TransactionType_ID", TransactionType_ID));
            }
        }
    }

在 DataAccessLayer 中,我将以下代码用于一个类(例如 CategoryList 类)

public class CategoryList : List<Category>
    {
        public void GetCategoryObjects(params int [] TransactionType_ID)
        {
            int TransactionType_ID_Val = TransactionType_ID.Count();
            XDocument doc = null;
            XMLFileManager XMLDocObj = new XMLFileManager();
            doc = XMLDocObj.LoadXMLFile("Categories.xml");

            if (TransactionType_ID_Val == 0)
            {
                var vAllCategories = from s in doc.Descendants("Category")                                 
                                     select new Category(s);
                this.Clear();
                AddRange(vAllCategories);
            }
            else
            {
                var vCategories = from s in doc.Descendants("Category")
                                  .Where(x => x.Element("TransactionType_ID").Value == TransactionType_ID[0].ToString())
                                  select new Category(s);
                this.Clear();
                AddRange(vCategories);
            }
        }

在我的 BusinessLayer 中,我将以下代码用于一个类(例如 CategoryManager 类)

public CategoryList GetCategories(params int [] TransactionType_ID)
            {
                CategoryList m_dbList = new CategoryList();
                m_dbList.GetCategoryObjects(TransactionType_ID);
                return m_dbList;
            }

   public List<String> LoadCategories(params int [] TransactionType_ID)
           {
              CategoryManager CategoryManagerObj = new CategoryManager();
              CategoryList CategoryListObj = new CategoryList();
              List<String> CategoryNames = new List<string>();
              CategoryListObj = CategoryManagerObj.GetCategories(TransactionType_ID);
            foreach (Category vCategory in CategoryListObj)
            {
              CategoryNames.Add(vCategory.Name);
            }

            return CategoryNames;
          }

现在我正在使用业务层来创建我的移动应用程序的用户界面层。现在我想将以上三层——CoreLayer、DataAccessLayer 和 BusinessLayer 逻辑放入 WCF Web 服务中。我想从我的 WCF 服务中公开方法 LoadCategories()。与上述情况类似,我想从 WCF 服务中公开不同的方法。那么我应该遵循什么架构?我是否应该在我当前的 CoreObjectlayer 的 WCF 服务应用程序中添加“WCF 服务库”以及 DataAccessLayer 的“WCF 服务库”到 WCF 服务应用程序,并且我当前的 WCF 服务应用程序将充当业务层?这是正确的方法吗?或者我应该继续使用我当前的 WCF 服务应用程序,而没有任何“WCF 服务库”和单一方法 LoadCategories() 包含所有三层中包含的逻辑?或者还有其他方法吗?您能否提供我可以解决上述问题的任何解决方案或链接?如果我做错了什么,请指导我。

【问题讨论】:

    标签: c# web-services windows-phone-7 wcf architecture


    【解决方案1】:

    无需争论您可以在此处使用的数十种架构的优点 - 保持简单并尽可能少地公开。

    如果您只需要返回一组数据对象 (Server.GetListOfPeanutButters()),那么只公开“LoadCategories()”- 您真的应该在想,“我真正需要在后端公开什么让它工作”,其他一切通常不应该通过服务公开。

    从那里开始并根据需要发展 - 这是我的建议。

    【讨论】:

      猜你喜欢
      • 2015-07-25
      • 2021-07-28
      • 2018-04-30
      • 1970-01-01
      • 2017-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多