C# ASP.NET+C+XML应用程序作为传输层、数据层、业务层和用户界面体系结构

C# ASP.NET+C+XML应用程序作为传输层、数据层、业务层和用户界面体系结构,c#,asp.net,xml,visual-studio-2010,C#,Asp.net,Xml,Visual Studio 2010,一周前,我受雇于一家制造CAD产品的公司 在培训期间,我学习了C语言和ASP.NET 昨天,我从项目经理那里收到了一个带有TL、DL、BL和UI体系结构的应用程序 我有一个XML文件,如下所示: <parent> <Categories name="something1"> <link url="link1" name="name1" description="descr1"/> <link url="link2" name="name2" descri

一周前,我受雇于一家制造CAD产品的公司

在培训期间,我学习了C语言和ASP.NET

昨天,我从项目经理那里收到了一个带有TL、DL、BL和UI体系结构的应用程序

我有一个XML文件,如下所示:

<parent>
<Categories name="something1">
<link url="link1" name="name1" description="descr1"/>
<link url="link2" name="name2" description="descr2"/>
...
</Categories>
<Categories name="something2">
<link url="link1" name="name11" description="descr11"/>
<link url="link2" name="name21" description="descr21"/>
...
</Categories>
...
</parent>
好的,在这里之前,我希望我写的是正确的。 现在,他告诉我关于Categories类,它有Name属性,带有setter和getter以及链接列表,每个链接都有这个对象,这里我不知道如何从link类中获取

在数据层中,在UrlStorage类中,我必须从categories类中获取类别列表

注意,在TL和DL层中,我不必使用XML函数或对XML文件进行任何操作

在BL层中,我将使用对XML文件进行操作的方法添加节点、删除节点等,并获得类别列表

在UI中,我将实现一个TreeView对象来显示类别及其链接

我不需要其他代码,但我需要一个完整的项目,其中有所有四层架构,以更好地理解。没有定义,只是示例,因为我会通过示例更好地理解。当然,我会创造更多的例子来了解非常好


非常感谢您的时间。

TL传输层将包含所谓的DTOs数据传输对象。DTO的目的是提供一种将数据从一个系统或层传输到另一个系统或层的简单方法。在您的例子中,您提到的Link和Categories类将被视为可能命名为LinkDto和CategoriesDto的dto。它们负责在进出BL业务层或其他实例中的数据层时包含数据

下面是一个DTO类的示例,可以帮助您入门,但这些类并不是100%正确的

public class LinkDto
{
    [XmlAttribute("url")]
    public string Url { get; set; }

    [XmlAttribute("name")]
    public string Name { get; set; }

    [XmlAttribute("description")]
    public string Description { get; set; }
}

public class CategoryDto
{
    [XmlAttribute("name")]
    public string Name { get; set; }

    [XmlElement("link")]
    public List<Link> Links { get; set; }
}

我使用了System.Xml.Serialization.XMLAttributeurlIn事实上,我必须在TransferLayer中声明LinkDto和CategoriesDto…在DataLayer中,我有一个名为URLStorage的类,它处理Xml文件并获取类别列表。如何在UserInterface层中为TreeView使用这些类?请…谢谢未知方法GetAllCategories;此代码是作为示例提供的,而不是作为逐字记录应用程序提供的。这里有足够多的声音信息让你开始学习,这正是你所要求的。
public class LinkDto
{
    [XmlAttribute("url")]
    public string Url { get; set; }

    [XmlAttribute("name")]
    public string Name { get; set; }

    [XmlAttribute("description")]
    public string Description { get; set; }
}

public class CategoryDto
{
    [XmlAttribute("name")]
    public string Name { get; set; }

    [XmlElement("link")]
    public List<Link> Links { get; set; }
}
namespace BusinessLayer
{
     public class Category
    {
         public string Name { get; set; }
         public List<Link> Links { get; set; }

         public static Category GetAll()
         {
             return DataLayer.GetAllCategories();
         }
    }  

    public class Link
    {
        public string Url { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
    }    
public static string Serialize<t>(t obj)
{
    using (StringWriter writer = new StringWriter())
    {
        XmlSerializer formatter = new XmlSerializer(typeof(t));
        formatter.Serialize(writer, obj);

        return writer.ToString();
    }
}

public static t Deserialize<t>(string xml)
{
    using (StringReader reader = new StringReader(xml))
    {
        XmlSerializer formatter = new XmlSerializer(typeof(t));
        return (t)formatter.Deserialize(reader);
    }
}
 <asp:Repeater runat="server" ID="rptCategories" OnItemDataBound="rptCategories_ItemDatabound">
        <ItemTemplate>
            <h2>Category: <%#Eval("Name") %></h2>
            <asp:Repeater runat="server" ID="rptLinks">
                <ItemTemplate>
                    <a href="<%#Eval("url") %>" title="<%#Eval("Description") %>"><%#Eval("Name") %></a>
                </ItemTemplate>
            </asp:Repeater>
        </ItemTemplate>
    </asp:Repeater>
protected void Page_Load(object sender, EventArgs e)
{

    if (!Page.IsPostBack)
    {
        rptCategories.DataSource = Category.GetAll();
        rptCategories.DataBind();
    }

}

protected void rptCategories_ItemDatabound(object sender, RepeaterItemEventArgs e)
{

    if (e.Item.ItemType == ListItemType.Item) {

        var repeater = (Repeater)e.Item.FindControl("rptLinks");
        var category = (Category)e.Item.DataItem;

        repeater.DataSource = category.Links;
        repeater.DataBind();
    }
}