.net 如何开发MS-CRM类应用程序

.net 如何开发MS-CRM类应用程序,.net,web-applications,architecture,metaprogramming,.net,Web Applications,Architecture,Metaprogramming,我曾与微软CRM合作过。在那里,我们可以图形化地设计自定义实体,然后我们还可以构建一个可视化表单来对该实体执行CRUD操作 从最终用户的角度来看,这感觉非常简单。然而,我很想知道如何开发类似的应用程序,在这种应用程序中,我可以动态地设计我的表和设计UI 我想知道的是,他们是如何动态地实现这一切的?如果我必须在一个简单的表上创建CRUD,我需要编写大量的代码。微软如何在飞行中实现一切?任何指针、任何文档都会大有帮助。我不知道他们实际上是如何做到的,但如果是我,我会使用和 以下是我认为它可能会起作用

我曾与微软CRM合作过。在那里,我们可以图形化地设计自定义实体,然后我们还可以构建一个可视化表单来对该实体执行CRUD操作

从最终用户的角度来看,这感觉非常简单。然而,我很想知道如何开发类似的应用程序,在这种应用程序中,我可以动态地设计我的表和设计UI


我想知道的是,他们是如何动态地实现这一切的?如果我必须在一个简单的表上创建CRUD,我需要编写大量的代码。微软如何在飞行中实现一切?任何指针、任何文档都会大有帮助。

我不知道他们实际上是如何做到的,但如果是我,我会使用和

以下是我认为它可能会起作用的方式/或者你可以如何做

组件

该系统需要一组组件或子系统;它们可以是您自己编写的或现有库(如果可以,请使用现有库):

  • 某种CMS,除非你想将其构建到你已经拥有的系统中
  • 允许用户创建“对象”的UI组件/控件。要做好这项工作,需要一个相当高级的UI(SilverLight?HTML5?)——尽管我想你可以使用一些非常基本的东西
  • 某种存储用户“对象”的方式—这是基本数据,您希望将其存储在某种“中立”存储库中
  • 做实际CRUD的东西——我在想某种ORM工具,比如实体框架、Lightspeed、NHibernate。您还需要CRUD操作本身的数据源目标
诀窍在于第2点和第3点;在这里,我将定义一组属性,这些属性可用于定义用户创建的对象。这些属性在逻辑上将流程连接在一起。因为可以在运行时读取属性:

  • 他们将能够驱动用户界面,允许用户组成他们的“对象”
  • 准备好后,您可以生成实际的类来物理实现用户定义的对象,然后用适当的属性装饰这些对象
  • 不知何故,让ORM工具知道如何将这些对象的属性(基于属性)映射到数据存储,或者,自己编写DAL——也许DAL会包装ORM

我使用的另一种方法基本上基于此,但它也利用了接口,数据存储为XML的“blob”——不是特定的离散元数据。

我不知道他们实际上是如何做到的,但如果是我,我会使用和

以下是我认为它可能会起作用的方式/或者你可以如何做

组件

该系统需要一组组件或子系统;它们可以是您自己编写的或现有库(如果可以,请使用现有库):

  • 某种CMS,除非你想将其构建到你已经拥有的系统中
  • 允许用户创建“对象”的UI组件/控件。要做好这项工作,需要一个相当高级的UI(SilverLight?HTML5?)——尽管我想你可以使用一些非常基本的东西
  • 某种存储用户“对象”的方式—这是基本数据,您希望将其存储在某种“中立”存储库中
  • 做实际CRUD的东西——我在想某种ORM工具,比如实体框架、Lightspeed、NHibernate。您还需要CRUD操作本身的数据源目标
诀窍在于第2点和第3点;在这里,我将定义一组属性,这些属性可用于定义用户创建的对象。这些属性在逻辑上将流程连接在一起。因为可以在运行时读取属性:

  • 他们将能够驱动用户界面,允许用户组成他们的“对象”
  • 准备好后,您可以生成实际的类来物理实现用户定义的对象,然后用适当的属性装饰这些对象
  • 不知何故,让ORM工具知道如何将这些对象的属性(基于属性)映射到数据存储,或者,自己编写DAL——也许DAL会包装ORM

我使用的另一种方法基本上基于此,但它也利用了接口,数据存储为XML的“blob”——而不是特定的离散元数据。

动态表单将使我能够设计UI。我可以通过在我的应用程序中托管WinForm designer或类似的东西来实现。我更感兴趣的是了解MS如何为中间层中的所有新实体实现CRUD。y如何概括他们可以为任何新的用户定义实体执行CRUD?动态表单将给我设计UI的能力。我可以通过在我的应用程序中托管WinForm designer或类似的东西来实现。我更感兴趣的是了解MS如何为中间层中的所有新实体实现CRUD。y如何概括他们可以为任何新的用户定义实体执行CRUD?