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

LightSwitch 课程表管理应用程序

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.73/5 (9投票s)

2011年11月28日

CPOL

6分钟阅读

viewsIcon

38326

本文介绍了一个用于管理构建大学课程表所需资源的 LightSwitch 应用程序

timetable_lightswitch/screenshot.png

问题解答

您的应用程序/扩展程序做什么?它解决了什么业务问题?

目前,该应用程序用于管理大学排课所需的数据。该应用程序的第一个版本将由大学教职员工用于管理构建排课所需的所有资源。这些资源包括物质资源和人力资源。我们将管理的数据包括:院系、专业、班级、科目、教授等。据我所知,这些数据是特定于国家的。我的意思是,不同国家的高等教育系统是不同的。该应用程序旨在允许用户管理罗马尼亚大学特定的排课资源(尽管我认为它们之间的系统也有所不同(尚未确定))。

timetable_lightswitch/screen2.png

timetable_lightswitch/screen3.png

这个应用程序有多少屏幕和实体?

该应用程序使用 14 个屏幕和 16 个实体。

LightSwitch 为您的业务节省了资金吗?如何节省?

LightSwitch 通过节省我大量的时间,为我省了钱。我构建这个 LightSwitch 应用程序是因为我想通过一个具体的真实应用程序来学习 LightSwitch。这个应用程序的最初版本花了我半年的业余时间来开发,那是在一年前。

我几个月前听说了 LightSwitch,但直到两周前才开始认真学习它。读完一本书后,我用不到一天的时间就构建了这个数据库管理应用程序。如果这不算快速应用程序开发 (RAD),我也不知道什么算。

如果您没有 LightSwitch,这个应用程序还会被构建出来吗?如果会,用什么构建?

该应用程序的第一个版本已经构建完成。第一个版本使用了以下技术:

  • WPF - 用于数据库管理客户端
  • WPF - 用于排课客户端(允许用户根据数据库中的数据构建排课的桌面客户端)
  • WCF 服务,服务器端使用 EF

下图展示了原始应用程序的架构

timetable_lightswitch/origArch.png

下图展示了原始版本管理应用程序的用户界面

timetable_lightswitch/origMgmt.png

下图展示了排课客户端应用程序的屏幕截图

timetable_lightswitch/origTimetable.png

这个应用程序支持多少用户?

该应用程序的第一个版本有 20 到 30 名用户使用。将在下方列表中列出将使用此应用程序的用户。

  • 系主任 - 将使用该应用程序来管理班级和科目
  • 排课编辑 - 这些人负责实际的排课
  • 管理员 - 他们将管理用户、角色和字典表

使用 LightSwitch 构建此应用程序实际花了多长时间?

使用 LightSwitch 构建该应用程序的数据库管理部分,我花了不到 8 个小时。管理应用程序的第一个版本花了 3 周时间。

该应用程序仍在开发中。我正在尝试集成一个自定义用户控件,该控件将允许用户使用此应用程序来构建排课。该控件的外观将与上图中所示的非常相似。

此应用程序是否使用任何 LightSwitch 扩展?如果使用,是哪些?您自己编写过这些扩展吗?如果编写过,是否公开发布?在哪里?

该应用程序目前不使用任何扩展。我曾经尝试过一个主题扩展(metro 主题),但最终将其移除了。

timetable_lightswitch/theme.png

我认为该应用程序将来会使用 LightSwitch 控件扩展(当然,前提是我能构建那个自定义控件)。

LightSwitch 如何让您的开发人员生活更好?与您考虑过的其他选项相比,构建速度是否更快?

LightSwitch 让我的开发生活变得更美好。我立刻注意到最明显的一点是,只需点击几下,就可以轻松地构建复杂的屏幕并将它们绑定到需要显示的数据。这让我将注意力从构建和调整 UI 转移到编写验证、业务逻辑和安全管理。

在应用程序的早期版本中,每次更改数据库结构时,UI 代码(以及其他所有代码)的重构(在第一个版本中,由于我沟通的一些人忘记了一些需求,数据库经常更改)都花费了很长时间。使用 LightSwitch,这不再是问题。一旦实体结构发生变化,UI 就会自动更新。

另一个改善我开发生活的事情是,通过运行时自定义,我可以快速地调整 UI。我不再需要在停止应用程序的情况下对 UI 进行小的更改。

酷代码

在我看来,在这个应用程序中使用过的最酷的代码是帮助我添加 `Professors` 实体与应用程序使用的用户之间的关系的那个。

为了实现这一点,我添加了一个新的类库项目,并向其中添加了一个 `DomainService` 类。这个 `DomainService` 将作为 LightSwitch 应用程序中的一个新数据源,返回所有的数据库用户。下面可以看到这个 `DomainService` 类。

public class UserDomainService : DomainService
{
    [Query(IsDefault=true)]
    public IEnumerable<User> GetUsers()
    {
        try
        {
            IDataWorkspace dw =
            ApplicationProvider.Current.CreateDataWorkspace();
            var users = dw.SecurityData.UserRegistrations.GetQuery().Execute();

            return users.Select(p => new User() { UserName = p.UserName }).ToList();
        }
        catch (Exception ex)
        {
            return null;
        }
    }

}
public class User
{
    [Key]
    public string UserName { get; set; }
}

正如您所见,这个类只包含一个方法。该方法被标记为默认查询,用于返回应用程序数据库中包含的用户集合。代码使用 `ApplicationProvider` 类来访问数据工作区。之后,它使用 `UserRegistrations` 查询从数据库中获取用户并返回它们。

下一步,既然 `DomainService` 已经准备好,就是将其作为数据源添加到 LightSwitch 应用程序中。这可以通过选择“添加数据源”并选择 WCF RIA Service 作为数据源来完成。

timetable_lightswitch/riaSource.png timetable_lightswitch/riaSource2.png

添加源后,我创建了一个辅助实体,它连接了 `User` 和 `Professor` 实体。

timetable_lightswitch/riaSource3.png

现在可以构建一个屏幕来向 `ProfessorForUser` 实体添加条目。这将是一个“列表”和“详细信息”屏幕,将显示来自 2 个数据源的数据。

timetable_lightswitch/2sourceScreen.png

目前,数据无法保存到相应的表中。为了解决这个问题,我编辑了 `InitializeDataWorkspace` 和 `Saving` 方法的代码。下面可以看到。

partial void UsersListDetail_InitializeDataWorkspace(List<IDataService> saveChangesTo)
{
    // Write your code here.
    saveChangesTo.Add(DataWorkspace.ApplicationData);
}
partial void UsersListDetail_Saving(ref bool handled)
{
    try
    {
        DataWorkspace.ApplicationData.SaveChanges();
        handled = true;
    }
    catch (Exception ex)
    {
        this.ShowMessageBox(ex.Message);
    }            
}

`InitializeDataWorkspace` 方法用于指定屏幕用于保存更改的数据源。由于我们在 `ApplicationData` 数据源中修改实体,我们将只指定这个数据源。我们还需要自己进行保存。这就是引入 `Saving` 方法的原因。

关注点

第一个值得关注的点是实体键。您知道,当您创建实体时,LightSwitch 会自动插入一个不能删除的整数键。起初,我想使用 guid 作为实体键,但无法做到。有趣的是,如果您单独构建数据库并将其导入 LightSwitch,则可以使用 guid 键。根据我的测试,LightSwitch 足够智能,可以为您自动生成 guid 键。您不必在代码隐藏中编写代码来设置新条目创建时的键,例如。

我注意到的另一个有趣的事情是,默认情况下,您无法使用现有数据库中的用户(如果您已经有了用户)。您可以通过修改 LightSwitch 生成的原始数据库和 `web.config` 文件来实现这一点。

我真的越来越喜欢 LightSwitch 了。我迫不及待地想开始开发我自己的扩展。

© . All rights reserved.