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

MyBizz Portal:您见过的“最小”的 LightSwitch 应用程序

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.87/5 (15投票s)

2012 年 1 月 25 日

CPOL

16分钟阅读

viewsIcon

63296

MyBizz Portal:您见过的“最小”的 LightSwitch 应用程序

自从第一次看到 LightSwitch 的演示以来,我就沉迷于它的强大功能,并立即意识到 LightSwitch 为我提供了一个创业公司的机会,该公司将于 2012 年 4 月 2 日正式成立……

LightSwitch 是一个真正独特的工具,可以几乎在瞬间编写中小型业务应用程序,同时具有足够的灵活性来避免陷入“死胡同”,而这在经典的 RAD 框架中是常有的事。上一句话包含了大量对 LightSwitch 的赞美和喜爱,但也包含了我最大的担忧之一。大型企业应用程序怎么样?如果我的应用程序从小规模开始,却获得了巨大的成功,那么我钟爱的技术会不会成为业务增长的负担?

  • LightSwitch 能处理极其庞大的应用程序吗?在一个 LSML 中能容纳多少功能?企业 LightSwitch 应用程序的加载速度足够快吗?
  • LightSwitch 能处理水平扩展场景吗?我可以将 LightSwitch 应用程序分发安装到多台服务器上来支持大量并发用户吗?
  • 当我的客户有相似需求时,我如何重用屏幕和实体?VSIX 扩展真的是唯一的途径吗?我能局部更新一个功能而不必担心破坏应用程序的其他部分吗?
  • LightSwitch 可以帮助我闪电般地开发,但这是一家公司顺利运行的唯一方面吗?LightSwitch 如何帮助我协调客户、开发人员、销售人员……或者帮助我跟踪版本、服务器、功能请求、安装……
  • 多个开发人员如何处理同一个 LightSwitch 应用程序?每天合并 LSML 文件将是一场噩梦……

LightSwitch 能让我振奋起来,但它能在我达到巡航速度时继续支撑我吗?

有一天晚上——不知道为什么,我最好的想法总是在闹钟响之前 4-5 小时出现,那时我该起床准备上班了——我想起了一篇论文,其中有一句话:“**我们对现实的看法是由我们使用的语言塑造的,因此受到限制**”。

仅仅使用一种不同的术语(即企业面向服务的架构分类法中使用的术语),我对 LightSwitch 的看法,以及它的局限性,就发生了巨大的变化。

LightSwitch 分类法 101

LightSwitch 应用程序 (LS APP)

为了再次用相同的语言交流,让我们快速回顾一下我们今天能开发的“最复杂”的 LightSwitch 应用程序之一的结构。不提及外观扩展,LightSwitch 应用程序本身将生成三个核心组件:一个单独的 SilverLight 应用程序,连接到一个单独的 WCF 服务,该服务又连接到一个单独的 SQL 数据库,并且您可能会使用三种其他数据源之一:外部数据库、SharePoint 数据库或外部 WCF RIA 服务。

这就是我们以前称之为 LightSwich 应用程序的东西,但是从现在开始,**LightSwitch 应用程序将不再被视为比 Visual Studio 中的 LightSwitch 项目结构更高级**……当创建新的 LightSwitch 应用程序时,您可以选择将结果视为一个“模块”。

LightSwitch“模块”应该立即形成这样一种心理图景,即您正在设计一个更大的有机体的、范围明确的、可重用部分。

LightSwitch 实体模块 (LS EM)

**LightSwitch 实体模块是一个 LS APP,其唯一职责是设计简单的数据库实体**,其他模块可以对其执行 CRUD 操作。它不包含业务逻辑或验证。(**注意**:LS APP 也会生成一个 WCF 服务和一个相当空的 SilverLight 组件,我们永远不会使用它们。)

外部进程模块 (EX PcM)

**外部进程模块是任何可以向最终用户或我们的 LightSwitch 进程模块提供外部进程访问的模块。**我并不是必须说这些模块的源代码不在我们控制之下,而只是指它们不是用 LightSwitch 编写的。

LightSwitch 进程模块 (LS PcM)

**LightSwitch 进程模块是一个实现特定业务流程的 LS APP。**它(可选地)包含自己的实体、逻辑、屏幕,并引用它所需的任何 LS EM、EX PcM 或其他 LS PcM 来实现该业务流程。

**任何 LightSwitch 模块都需要在开发前进行仔细的范围界定/设计,但这在讨论 LS PcM 时尤其容易违反。**考虑为我的软件公司管理客户的功能。我的销售团队需要软件来处理这些客户,以便他们可以安排会议来讨论改进或新功能请求。开发团队也需要软件来处理这些客户,以便他们可以为他们实现用户故事,联系他们讨论实现……工程团队也需要软件来处理这些客户,因为他们想跟踪已安装的软件版本、服务器、暂存区域……最后,会计需要将这些客户纳入其会计套件,以便他们可以正确地向客户开票。虽然创建一个“管理客户 LightSwitch 进程模块”可能是一个好主意,但**创建一个四个独立的 LS PcM 是一个更好、更可维护的主意**,因为您正在处理四个独立的业务流程,每个流程都有自己的逻辑、引用和屏幕,并且最有可能共享一个包含通用“客户”实体的“客户 LS EM”。四个独立的 LS PcM 不仅更小、更易于维护,而且加载速度更快。

LightSwitch 实用工具模块 (LS UM)

**LightSwitch 实用工具模块是一个非应用程序特定的模块,提供一些可重用的功能。**理想情况下(但不总是),您可以将其打包为 VSIX 扩展。好的例子是通用报表扩展、日志记录功能,或内置的 LightSwitch 安全模块(用户、组和权限)。

LightSwitch 门户模块 (LS PtM)

许多流行的应用程序框架,如 PRISM 或 Caliburn,都实现了“Shell”的概念,该概念在运行时将不同的模块或子系统融合成一个单一的 UI。

即使经过多次尝试,我仍未成功在 LightSwitch 中实现这种运行时编织。

但是,您仍然可以创建一个 LS APP,为最终用户提供非常相似的体验,因为您可以在 LightSwitch(桌面)应用程序中托管一个网页浏览器(感谢 Tim Leung 的文章,您真是个天才!),并且 SilverLight 应用程序(LS PcM)托管在普通网页中。

上面是我第一个成功创建 LightSwitch 门户模块的尝试。我正在开发两个交互式 LightSwitch 应用程序的概念验证(因此是“学生”/“老师”实体),这时我读到了 Tim Leung 的文章。我必须马上尝试一下。如果您点击图片并注意网页属性,您会看到,您可以通过两个简单的 LS APP,直接从 Visual Studio 调试器创建和测试您自己的 LS PtM!

LightSwitch 门户模块是一个 LS APP,它为用户提供进入业务网络的单一入口点,并允许他们“门户”到他们选择的进程模块。

业务网络

**业务网络是支持公司业务的各种模块的集合。**此网络可以部分或完全私有(例如,不在公司域之外访问)。它可以包含许多外部模块和 LightSwitch 模块。关联公司的业务网络也可以部分重叠。

MyBizz 网络

在上图中,您可以看到这样一个网络的(简化)示例。

实际上是两个。

左边的网络将满足我创业公司的需求,右边的网络是我为演示目的创建的……让我这样说吧——为了避免法律问题——“一家特定的房地产公司”已经看到了这个“我手头上的演示”,“可能”会在 4 月 2 日成为我的第一个付费客户。这两个网络都分布在私有(Windows 2008)和公共(Windows Azure)服务器上,总共 4 台服务器……

图片没有显示的是,这两个网络实际上是重叠的。如果我绘制不同组件之间的依赖关系,那会更清楚,但这很快就会让概览变成一团乱麻……

演示客户的 skinrepository 从我的业务(中央)skin repository 中提取资源,我的 STS(稍后见:单点登录)是演示客户 STS 的受信任 STS,他的 MITS(我的问题跟踪系统)读取和写入我的 PITS(公共问题跟踪系统)。

我们的两个业务网络包含超过 235 个实体、数百个屏幕、几乎所有我能想到的扩展(包括成就扩展,以鼓励我的销售团队为每个客户需求编写体面的规格,他们可以获得积分,这可以转化为奖金计划,同时使开发人员的工作更轻松……还有一个非常早期的皮肤扩展的 alpha 版本……),几乎所有我能弄到的免费扩展(感谢所有社区贡献者!),以及一些商业扩展。

MyBizz 门户

我目前仍在玩弄门户应用程序,但已经达到了一个可以“向公众公开”的满意程度。

开始使用 MyBizz 门户…

在“干净”安装后,管理员用户可以启动应用程序,登录后会看到应用程序的主屏幕——也是唯一的屏幕……

为了解释您在这里看到的内容……我有一个包含核心数据的 LS EM,其中一个实体称为“MyBizzModule”。在我的门户应用程序中,我连接到该数据,并在自定义 Silverlight 控件中显示它。由于没有其他屏幕和命令,我选择使用一个空白的 Shell 扩展。

由于只配置了一个模块(换句话说:数据库中只有一个MyBizzModule记录),这个应用程序现在提供的唯一选项是点击底部的那个孤零零的红色框图标……

点击后,模块打开并向我们显示其登录屏幕……(您可能需要放大图像才能看到实际上是另一个 LightSwitch 应用程序正在另一个 LightSwitch 应用程序中显示。)

单点登录

登录后,我们可以看到模块的主屏幕。这个 LS PcM 允许我们管理业务网络中的所有模块,目前只有一个已配置。

名称、图像和门户站点应该不需要解释,但第四个非常特别,需要一个多小时才能详细解释。

在我的业务网络中,我有一个 WCF 服务充当安全令牌服务。业务网络中使用的登录屏幕实际上都是“破解”的自定义实现。

它们不是通过当前 LightSwitch 应用程序进行身份验证,而是向 STS 请求一个加密令牌,并使用该令牌作为登录的密钥——或者,只有在自动身份验证失败时,才会向用户显示登录屏幕。当我登录门户应用程序时,门户应用程序将令牌保留在内存中。

现在,如果我选中“**包含安全令牌**”复选框,然后门户到该模块,加密令牌将通过查询(我以同样的方式处理了“LightSwitch Deep Linking”)传递到该模块。“破解”的登录屏幕将拾取令牌并尝试使用该令牌自动登录。

这项功能对最终用户来说非常重要,我们不希望他们在每次门户到不同模块时都输入用户名和密码,因此有了“单点登录”……

另一个主要好处是一个 STS 可以“信任”另一个 STS。这意味着我可以登录我的业务网络,并导航到关联公司网络中的一个“公共”模块。该模块将识别我正在使用的令牌是由我的 STS 发出的,并相应地映射我的声明(权限)。

我试图传递的另一件事是关于应使用“默认皮肤”的信息。此功能处于**极其**早期 alpha 阶段,所以我不会深入探讨。

最后一个属性,必需的声明,只是允许管理员指示只有具有给定权限(声明)的用户才能查看/使用该模块,从而在比我们 LightSwitch 开发人员一直以来所做的经典屏幕和实体级别高得多的级别上进行用户和组的精细调整……

继续

解释够了,让我们为那个模块设置一些值并重新启动应用程序(此刻已配置的模块的更改仍需要重启……)。

您可以看到“Cosmopolitan.Blue”皮肤已被加载(未完成,基于 Silverlight 主题LightSwitch Metro 主题源),并且我无需再次登录即可进入模块……(嗯,很难发布后者截图。)让我们玩得开心一点,添加两个示例模块,一个门户到 Twitter,一个门户到 MSDN。

点击中间的鸟形图标表明门户应用程序(显然)不仅限于 LS PcM,任何可以在浏览器中显示的链接都可以。

最后,仅仅为了展示我的自定义 SilverLight 控件——3 个图标真的不足以说明问题,以下截图是我今天的业务网络,大约在我公司成立前两个月……

这会产生以下布局……

另加奖励积分…

基本问题

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

从技术角度来看:它是一个带有高级 URL 管理系统的浏览器包装器。

从 LightSwitch 的角度来看:它是一个管理我的 LightSwitch 应用程序的 LightSwitch 应用程序。

从功能角度来看:它是一个允许用户门户到我的 LightSwitch 业务网络中任何他想要(/允许)的地方的应用程序……

从个人角度来看:它是拼图的最后一块缺失的部分,它将帮助我管理我的初创公司(客户、销售团队、费用、跟踪项目和 LightSwitch 应用程序……),并让我有信心,LightSwitch 确实无所不能。

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

该应用程序有 1 个屏幕和 1 个实体。

附加问题

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

还没有,但我坚信一旦我的公司成立,它将为我节省大量开支……不过我可以说,如果没有 LightSwitch,我在下班后开始创业,并实际生产出可用的软件的机会,几乎为零。

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

很可能不会被构建出来。

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

理论上,超过7,023,324,899;特别是由于模块可以部署在单独的服务器上并通过负载均衡。数据库将是唯一的瓶颈。

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

不到一周。大部分时间花在了尝试制作一个径向 ItemsControl 上。我的开发经验有限,设计经验为零……另外两个晚上花在了编写这篇文章和截屏上。LightSwitch 部分花了我 15 分钟。(当然,开发两个业务网络花了 6 个多月)

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

业务网络中的 LS PcM 也使用……
  • LightSwitch Achievements - 自行开发,并且作为博客文章系列的一部分,因此即将公开发布。
  • LightSwitch STS - 自行开发,并且短期内不会公开发布,但是,我很快会将注入自定义登录屏幕的功能移植到 EME。
  • LightSwitch Skin Studio - 自行开发,并将在今年晚些时候公开发布……很久很久以后……
  • 许多,许多,许多商业和免费扩展 - 特别感谢 LightSwitch 团队、Alessandro、Tim、Yann、Bala 和 Michael 为社区做出的巨大贡献!(如果我忘记了任何特别的人,我提前表示歉意!!)

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

LightSwitch 给了我巨大的热情和能量来构建支持客户流程的应用程序,在撰写本文时,我发现我无法在任何其他技术中获得这种能量……它只需点击几下即可完成所有繁琐和无聊的任务,让您专注于使应用程序脱颖而出的真正内容。

附加附加问题

LightSwitch 能处理极其庞大的应用程序吗?在一个 LSML 中能容纳多少功能?企业 LightSwitch 应用程序的加载速度足够快吗?

是的,如果您能找到任何方法将您的超大型应用程序拆分成许多不同的模块,并将它们整合在一起,那么任何 LightSwitch 开发人员应该都没有限制。我选择的解决方案(使用浏览器控件)完美地满足了我的业务需求,并且由于模块仅在您实际访问它们时加载,因此极大地缩短了应用程序的加载时间。

LightSwitch 能处理水平扩展场景吗?我可以将 LightSwitch 应用程序分发安装到多台服务器上来支持大量并发用户吗?

是的,它确实有效!

当我的客户有相似需求时,我如何重用屏幕和实体?VSIX 扩展真的是唯一的途径吗?我能局部更新一个功能而不必担心破坏应用程序的其他部分吗?

VSIX 是一种方式,有时是最好的方式。如果您真正想重用屏幕和实体,将应用程序分发到多个可重用模块中,将为 LightSwitch 的开发方式带来全新的维度的好处。

LightSwitch 可以帮助我闪电般地开发,但这是一家公司顺利运行的唯一方面吗?LightSwitch 如何帮助我协调客户、开发人员、销售人员……或者帮助我跟踪版本、服务器、功能请求、安装……

LightSwitch 帮助我构建了几个 LS PcM,以便在短短几天内跟踪我的业务流程……

多个开发人员如何处理同一个 LightSwitch 应用程序?每天合并 LSML 文件将是一场噩梦……

如果他们每个人只处理一个模块,那就不会了……

源代码在哪里?

你想得美 ;) (尽管部分内容可以经过打磨,然后根据需要发布在我的博客上。)

© . All rights reserved.