C# 创建一个';网站建设者';-我将如何设计它?

C# 创建一个';网站建设者';-我将如何设计它?,c#,asp.net-mvc,templates,web,spark-view-engine,C#,Asp.net Mvc,Templates,Web,Spark View Engine,我的任务是在我们的应用程序套件中添加一个网站生成器。我们的大多数客户都是非技术性小企业主(实体店、夫妻店)。有人告诉我,我应该看看并试着看看我是否能制作出功能齐全且易于使用的东西。我们的想法是,我们的客户应该能够在不了解任何web开发的情况下将他们的业务上线 我主要每天与c#和silverlight合作。所以对我来说,使用.net可能是最好的方式。ASP.NET MVC和SPARK看起来非常吸引人,但我不太确定如何完成以下任务 1-如何构建一个模板系统,允许设计师创建使用特定格式且与我的应用程序

我的任务是在我们的应用程序套件中添加一个网站生成器。我们的大多数客户都是非技术性小企业主(实体店、夫妻店)。有人告诉我,我应该看看并试着看看我是否能制作出功能齐全且易于使用的东西。我们的想法是,我们的客户应该能够在不了解任何web开发的情况下将他们的业务上线

我主要每天与c#和silverlight合作。所以对我来说,使用.net可能是最好的方式。ASP.NET MVC和SPARK看起来非常吸引人,但我不太确定如何完成以下任务

1-如何构建一个模板系统,允许设计师创建使用特定格式且与我的应用程序兼容的模板。有没有通用的框架

2-我如何坚持客户对其网站所做的更改(例如,客户更改背景颜色并在页面上添加成分列表)

编辑:是的,我知道这是一项艰巨的任务,我正在考虑编写一个完整的CMS,但是我们的客户需要非常有限的基本功能,我想这将是一个迭代过程,如果产品被证明是成功的,可能会有更多的开发人员参与。不过,我会让我们的经理知道这些问题

最初,我打算给他们一些模板化的布局,允许他们定制不同部分的内容以及CSS的颜色和图像。看起来它们很有用,我可以将所有用户可自定义的参数保存在数据库中


我的想法是正确的还是完全不正确?

如果你想使用.NET,我建议你看看Umbraco,它是一个非常流行的开源CMS,背后有一个非常好的社区。目前它是用Webforms编写的,但下一个版本(5)将在ASP.NET MVC中重做


它也可以在Microsoft上使用,因此安装起来很容易。

您实际上被赋予了编写全面内容管理系统的任务。这是一个庞大的任务,可能需要一个独立的开发者6-24个月的时间来构建,这取决于经验(这是基于市场上其他CMS的开发时间)。例如,Umbraco(一种开源的ASP.NET CMS)的开发人员正忙于将他们的CMS移植到ASP.NET MVC,这项工作大约在今年年初开始,预计要到明年年中才能建成,他们是业内最有才华的开发人员之一

我并不怀疑你的才能,但除非你的老板给了你一个非常大的工作时间,或者你计划让你的网站建设者非常基本,功能最少,否则,也许建立一个成熟的网站建设者或CMS会让你吃不消

正如其他海报所建议的,如果你是一名.NET开发人员,你也许应该尝试一下市场上现有的CMS


如果你坚持要建造自己的房子,那就需要一些认真的计划。看看软件体系结构设计模式,如DDD(域驱动设计),可靠的原则,如依赖注入,存储库模式,持久性忽略,服务层等。MVC绝对是正确的选择。还可以看看马丁斯·福勒(Martins Fowler)的书,迪诺·埃斯波西托(Dino Esposito)或埃里克·埃文斯(Eric Evans)

这在很大程度上取决于您的需求

一个简单的解决方案是使用多个基本模板和占位符,这些占位符稍后会被内容/其他模板填充

即,模板可能如下所示:

<html>
  <head><title>foo</title></head>
  <body>
    <div id="menu">{auto_generated_menu}</div>
    <h1>{page_header}</h1>
    <div id="content">
      {page_content}
    </div>
  </body>
</html>

福
{自动生成的菜单}
{页眉}
{页面内容}
然后,您为用户提供了一种定义页面标题和页面内容的简单方法,即第一种方法可能只是一个文本框,使用类似TinyMCE的东西填充内容。 如果需要,客户端可以在内容中使用其他占位符,但这可能不是必需的

之后,您只需添加一个自动生成的菜单,创建用用户输入的内容替换占位符的逻辑(类似于
template.content=template.content.Replace(“{page\u content}”,customer.Pages['foo'].GetTemplateContent(“page\u content”);
)还可以添加一个CSS样式表,其中包含客户提供的颜色和字体设置

最复杂的部分是后端和用户身份验证

这个解决方案实现起来很简单,根本没有真正的灵活性,但它允许客户快速编写一些文本并添加一些奇特的图像,而无需关心其他任何事情


要保留颜色设置,请将其写入数据库,并在每次更改时创建新的CSS样式表。对于其他内容,只需使用带有“key”和“value”列的数据库表“content”,您可能希望在每次更改时生成静态HTML页面。

您所说的是作为应用程序一部分集成的mini-Wix或mini-weebly;如果是这样,你需要把它说清楚。