65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 Kendo UI 结合 S#arp Architecture 的指南

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2013 年 10 月 4 日

CPOL

4分钟阅读

viewsIcon

10192

这是一篇关于使用 Kendo UI 结合 S#arp Architecture 的指南

我们已经使用S#arp架构相当长一段时间了,它已被证明是我们公司内部开发的一些企业应用程序的良好平台。虽然它为我们的Web应用程序提供了良好的平台,但它并没有提供易于重用的表示层组件。这就是Kendo UI发挥作用的地方。之前我们使用的是旧版本Telerik MVC,但此后我们升级到了这个较新的版本。本指南将介绍如何使用这两个产品启动项目。

在开始之前,我假设您已经创建了数据库,并使用了与Fluent NHibernate兼容的命名约定。这意味着以下几点:

  • 表名使用复数形式(例如:EmployeesPositionsDepartments
  • 表主键为表名单数形式并以Id结尾(例如:EmployeeIdPositionIdDepartmentId
  • 数据库对象的任何属性都使用驼峰命名法(例如:ThisIsASampleDatabaseColumn
  • 定义您的外键关系,并保持与相关表列相同的命名。

此外,如果您的开发机器上尚未安装Kendo UI for ASP.NET MVC,您可以从此处获取(http://www.kendoui.com/download.aspx)。

让我们开始吧。

  1. 下载并安装Templify,您可以从此处获取最新版本(http://opensource.endjin.com/templify/)。

    01 Templify

  2. 下载并安装S#arp架构,您可以从此处获取最新版本(http://sharparchitecture.net/downloads.htm)。安装完成后,运行Templify并将Templify部署到您选择的文件夹中。选择一个模板和命名空间,在本示例中我们将其命名为MyWebApp

    02 Select Template

  3. 现在点击部署。

    03 Generating

  4. 完成后,它会在您的通知栏中通知您。

    04 Completed

  5. 转到您的文件夹,它应该具有类似于这样的结构。

    05 Output Folders

  6. 进入Solutions文件夹,您的解决方案将位于其中。

    06 Output Folders 2

  7. 您会注意到它被创建为Visual Studio 2010版本,我们不需要那样,所以我们将使用Visual Studio 2012打开它。我想截至目前,它不是受支持的版本,但我们已经在S#arp项目中使用2012一年了,并且已经部署了两个应用程序而没有问题。

    07 Open

  8. 打开后,它将显示升级说明。转到您的表示层,选择Web项目并将其设置为启动项目。

    08 Set Web as Startup Project

  9. 通过转到NHibernate.config并选择您的数据库服务器来设置您的数据库。如果您的应用程序名称与数据库名称相同(我建议您这样做),则无需更改数据库名称。

    09 Configure nHibernate

  10. 升级您的项目以使用MVC 4。请遵循这篇文章
  11. 第一次运行您的项目。

    11 Running

  12. 现在让我们转换您的网站以使用Kendo UI。右键单击您的Web项目,选择Kendo UI for ASP.NET MVC,然后单击转换。

    12 Convert App To Kendo

  13. 只勾选“复制编辑器模板”,然后单击下一步。

    13 Start Convert

  14. 完成后,右键单击引用并管理NuGet包。恢复任何缺少的包。

    14 Restore Missing Packages

  15. 添加并安装Microsoft.AspNet.Web.Optimization,这用于捆绑和优化CSS和JS文件。

    15 Download Optimization Framework

  16. 添加以下内容
    • App_Start文件夹
    • 创建一个BundleConfig.cs
    • 添加jquery-1.9.1.min.js
    • 添加jquery.json-2.4.min.js
    • 添加jquery.unobtrusive-ajax.min.js
    • 添加jquery.validate.js
    • 添加jquery.validate.unobtrusive.js

    复制并粘贴此BundleConfig.cs代码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Optimization;
    namespace MyWebApp.Web.Mvc.App_Start
    {
        public class BundleConfig
        {
            public static void RegisterBundles(BundleCollection bundles)
            {
                // Clear all items from the default ignore list to allow 
                // minified CSS and JavaScript files to be included in debug mode
                bundles.IgnoreList.Clear();
    
                // Add back the default ignore list rules 
                // sans the ones which affect minified files and debug mode
                bundles.IgnoreList.Ignore("*.intellisense.js");
                bundles.IgnoreList.Ignore("*-vsdoc.js");
                bundles.IgnoreList.Ignore("*.debug.js", OptimizationMode.WhenEnabled);
    
                //Scripts Section
                bundles.Add(new ScriptBundle("~/bundles/jquery")
                    .Include("~/scripts/jquery-1.9.1.min.js")
                    .Include("~/scripts/jquery.validate.js")
                    .Include("~/scripts/jquery.unobtrusive-ajax.min.js")
                    .Include("~/scripts/jquery.validate.unobtrusive.min.js")
                    .Include("~/scripts/jquery.json-2.4.min.js"));
    
                //KendoSection
                bundles.Add(new ScriptBundle("~/bundles/mywebapp")
                    .Include("~/Scripts/Kendo/2013.1.514/jquery.unobtrusive-ajax.min.js")
                    .Include("~/scripts/kendo/2013.1.514/kendo.core.min.js")
                    .Include("~/scripts/kendo/2013.1.514/kendo.data.min.js")
                    .Include("~/scripts/kendo/2013.1.514/kendo.fx.min.js")
                    .Include("~/scripts/kendo/2013.1.514/kendo.popup.min.js")
                    .Include("~/scripts/kendo/2013.1.514/kendo.list.min.js")
                    .Include("~/scripts/kendo/2013.1.514/kendo.calendar.min.js")
                    .Include("~/scripts/kendo/2013.1.514/kendo.datepicker.min.js")
                    .Include("~/scripts/kendo/2013.1.514/kendo.numerictextbox.min.js")
                    .Include("~/scripts/kendo/2013.1.514/kendo.validator.min.js")
                    .Include("~/scripts/kendo/2013.1.514/kendo.menu.min.js")
                    .Include("~/scripts/kendo/2013.1.514/kendo.binder.min.js")
                    .Include("~/scripts/kendo/2013.1.514/kendo.dropdownlist.min.js")
                    .Include("~/scripts/kendo/2013.1.514/kendo.filtermenu.min.js")
                    .Include("~/scripts/kendo/2013.1.514/kendo.pager.min.js")
                    .Include("~/scripts/kendo/2013.1.514/kendo.sortable.min.js")
                    .Include("~/scripts/kendo/2013.1.514/kendo.userevents.min.js")
                    .Include("~/scripts/kendo/2013.1.514/kendo.draganddrop.min.js")
                    .Include("~/scripts/kendo/2013.1.514/kendo.groupable.min.js")
                    .Include("~/scripts/kendo/2013.1.514/kendo.editable.min.js")
                    .Include("~/scripts/kendo/2013.1.514/kendo.selectable.min.js")
                    .Include("~/scripts/kendo/2013.1.514/kendo.resizable.min.js")
                    .Include("~/scripts/kendo/2013.1.514/kendo.reorderable.min.js")
                    .Include("~/scripts/kendo/2013.1.514/kendo.grid.min.js")
                    .Include("~/scripts/kendo/2013.1.514/kendo.window.min.js")
                    .Include("~/scripts/kendo/2013.1.514/kendo.upload.min.js")
                    .Include("~/scripts/kendo/2013.1.514/kendo.aspnetmvc.min.js")
                    .Include("~/scripts/kendo/2013.1.514/cultures/kendo.culture.en-NZ.min.js")
                    .Include("~/scripts/mywebapp*"));
    
                //Css Section
                bundles.Add(new StyleBundle("~/content/css").Include(
                  "~/Content/Kendo/2013.1.514/kendo.common.min.css",
                  "~/Content/Kendo/2013.1.514/kendo.blueopal.min.css",
                  "~/Content/*.css"));
            }
        }
    }

    16 Dowload Latest jQuery

  17. 删除共享布局中所有旧的JS和CSS引用。您可以在MyWebApp.Web.Mvc/Views/Shared/_Layout.cshtml中找到它们。

    17 Remove all old references

  18. 替换为捆绑的代码行
    @Styles.Render("~/content/css")
    @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/mywebapp")
    18 Add bundled references
  19. Global.asax中注册它们。
    BundleConfig.RegisterBundles(BundleTable.Bundles);

    还要注册您的站点地图。

    SiteMapManager.SiteMaps.Register<XmlSiteMap>("Web", sitemap => sitemap.Load());

    19 Modify Global.asax

  20. 现在添加一个站点地图。右键单击您的项目,选择添加,然后选择站点地图。

    20 Add Sitemap

  21. 尝试使用一些Kendo UI组件。在您的主页->索引页面上添加日历。用类似这样的代码替换整个S#arp默认页面
    @{
        ViewBag.Title = "Home";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
    
    @(Html.Kendo().Calendar().Name("calendar"))

    然后在您的共享->布局中添加一个菜单,因此用类似这样的代码替换默认菜单

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    
    <head id="Head1" runat="server">
        <meta http-equiv="Content-Type" 
        content="text/html; charset=iso-8859-1" />
    
        <title>@ViewBag.Title</title>
    
        @Styles.Render("~/content/css")
        @Scripts.Render("~/bundles/jquery")
        @Scripts.Render("~/bundles/mywebapp")
    
    </head>
    <body>
        <div class="page">
            <div id="header">
                @(Html.Kendo().Menu()
                .Name("Menu")
                .HighlightPath(true)
                .BindTo("Web", (item, node) =>
                {
                    var url = node.Attributes["imageurl"];
                    if (url != null)
                        item.ImageUrl = node.Attributes["imageurl"].ToString();
                })
            )
            </div>
            <div id="mainContent">
                <div class="columnsContainer">
                    <div class="leftColumn">
                    </div>
                    <!--/leftColumn-->
                    <div class="rightColumn">
                        @RenderBody()
                    </div>
                    <!--/rightColumn-->
                    <div class="clear">
                    </div>
                </div>
                <!--/columnsContainer-->
            </div>
        </div>
        <!--/page-->
    </body>
    </html>

    尝试运行您的项目。然后它应该看起来像这样。在这个阶段,您的网站已经准备好了,但让我们配置一些组件,以便您的表示层可以与您的任务层通信。

    21 Menu Added

  22. 更新到最新的Json,因为S#arp使用的是4.0.8.0。

    22 Adding References (Newtonsoft)

  23. 我们将使用Json 4.5.10,您必须在表示层和任务层安装此引用。

    23 Adding References (Newtonsoft)

  24. 还要在您的任务层添加SharpArch.Nhibernate,因为您将在此处使用它。您可以在您的引用程序集文件夹中找到它。

    24 Adding References (Sharp nHibernate)

  25. 修改您ComponentRegistrar.cs的一部分,您可以在Web项目的CastleWindsor文件夹中找到它。

    旧代码应该如下所示

    private static void AddTasksTo(IWindsorContainer container)
    {
        container.Register(
            AllTypes
                .FromAssemblyNamed("MyWebApp.Tasks")
                .Pick()
                .WithService.FirstNonGenericCoreInterface("MyWebApp.Domain"));
    }

    您必须将其更改为类似这样的代码

    private static void AddTasksTo(IWindsorContainer container)
    {
        container.Register(
            AllTypes
                .FromAssemblyNamed("MyWebApp.Tasks")
                .InNamespace("MyWebApp.Tasks")
                .WithService.FirstNonGenericCoreInterface("MyWebApp.Domain"));
    }

一切就绪。

下周初,我将分享一个名为Sharpener的开源项目,此应用程序将根据您的数据库设计自动为您生成代码。这意味着您无需手动编写域对象、查询及其接口、视图模型、控制器、视图、命令和命令处理程序。这将节省您大量时间,并确保您的项目符合正确的命名和编程约定。

归档于:架构CodeProject编程
标签:C#Kendo UIS#arp 架构

© . All rights reserved.