创建"网站建设者" - 我将如何构建它?

Abd*_*med 6 c# asp.net-mvc templates spark-view-engine web

我的任务是在我们的应用程序套件中添加一个网站构建器.我们的大多数客户都是非技术性的小企业主(实体店,妈妈和流行商店).我被告知我应该看看Blogger模板编辑器,并试着看看我是否可以制作功能齐全且易于使用的东西.我们的想法是,我们的客户应该能够在不了解Web开发的情况下将他们的业务带到网上.

我主要使用c#和silverlight进行日常工作.因此,使用.net可能是最好的选择.ASP.NET MVC和SPARK看起来很有吸引力,但我不太清楚我将如何完成以下事情

1-如何构建模板系统,允许设计人员创建使用特定格式并与我的应用程序兼容的模板.那有没有通用的框架?

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

编辑:是的我知道这是一项重大任务,我可能正在考虑编写一个完整的CMS,但是我们的客户需要非常有限的基本功能才能开始,我想这将是一个迭代过程,可能会有更多开发人员加入如果产品证明是成功的话.我会告诉我们的经理这些问题.

最初我计划给他们一些模板化的布局,并允许他们使用CSS自定义各个部分以及颜色和图像.HAMLSass看起来很有用,我可以在数据库中保留所有用户可自定义的参数.

我是想沿着正确的方向思考还是完全不在这里?

Mor*_*dur 7

这很大程度上取决于您的要求.

一个简单的解决方案是使用几个带有占位符的基本模板,以后可以填充内容/其他模板.

即模板可能如下所示:

<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>
Run Code Online (Sandbox Code Playgroud)

然后,您为用户提供了一种定义页眉和page_contents的简单方法,即第一个可能只是一个文本框,内容通过使用像TinyMCE这样的东西来填充.如有必要,客户可以在内容中使用其他占位符,但这可能不是必需的.

之后,您只需添加一个自动生成的菜单,创建用用户输入的内容替换占位符的逻辑(某些内容template.Content = template.Content.Replace("{page_content}", customer.Pages['foo'].GetTemplateContent("page_content"));),并可能添加一个CSS样式表,其中包含客户提供的颜色和字体设置.

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

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

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


Sun*_*oot 6

您实际上被赋予了编写完整内容管理系统的任务。这是一项艰巨的任务,可能需要一个单独的开发人员 6 到 24 个月的时间来构建,具体取决于经验(这是基于市场上其他 CMS 的开发时间)。例如,Umbraco(一个开源的 ASP.NET CMS)的开发人员正忙着将他们的 CMS 移植到 ASP.NET MVC,工作从今年年初开始,预计要到明年年中才能建成,他们是行业中一些最有才华的开发人员。

我不怀疑你的才能,但除非你的老板给了你很长的工作时间,或者你计划你的网站建设者是极端基本的,功能很少,否则建立一个成熟的网站建设者或 CMS 正在咬人超过你可以咀嚼的。

正如其他海报所推荐的那样,如果您是 .NET 开发人员,您或许应该尝试市场上现有的 CMS,例如Umbraco

如果您确实坚持自己构建,则需要进行一些认真的计划。看看软件架构设计模式,如 DDD(领域驱动设计),SOLID 原则,如依赖注入、存储库模式、持久性无知、服务层等。MVC 绝对是正确的方法。还可以查看 Martins Fowler 的著作Patterns of Enterprise Application Architecture或 Dino Esposito 的Microsoft .NET: Architecting Applications for the Enterprise或 Eric Evans Domain-Driven Design: Tackling Complexity in the Heart of Software