我想知道大公司是如何在他们的页面上模块化组件的。Facebook就是一个很好的例子:
有一个致力于搜索的团队,他们有自己的CSS、javascript、html等。
有一个团队正在开发新闻提要,它有自己的CSS,javascript,html等……
..。这份清单还在继续
他们不可能都知道每个人都在给他们的div标签和诸如此类的东西命名,那么控制器是什么(?)如何将所有这些组件挂在最终页面上??
注意:这不仅仅适用于facebook -任何有独立团队开发独立组件的公司都有一些逻辑可以帮助他们解决问题。
编辑:感谢所有的回复,不幸的是我仍然没有真正找到我要找的东西-当你签出源代码(假设它是精简的),div有UID,我猜是有一个编译过程运行并使每个组件都是唯一的,重命名div和css规则。有什么想法吗?
编辑2:感谢所有人贡献你的想法-奖金给了最高票数的答案。这个问题被设计得含糊其辞--我认为它引发了一场非常有趣的讨论。随着我改进我的构建过程,我将贡献我自己的想法和经验。
谢谢大家!马特·穆勒
发布于 2010-03-04 17:38:48
Web开发肯定会带来一些组织上的挑战。HTML/CSS并不是拆分工作的理想环境。定义某些规则并严格遵守它们是非常重要的。
我个人的策略是在共享源(如CSS或标记组件)中的名称前面加上一些模块后缀。如果您坚持使用该策略,它将使名称全局唯一。
例如:
而不是
div.question_title
div.question_body
你可以使用
div.so_question_title
div.so_question_body
div.su_question_title
div.su_question_body
在一些共享数据上,如配色方案的颜色,也与团队达成一致。在全局的某个地方定义它们,并在任何地方重用它们。
当团队在同一页面的不同部分工作时,另一个问题就出现了。在这里,如果你正在开发一个页面组件,有一天你可能会发现一些东西被破坏了,因为在页面本身工作的人改变了一些东西,并且改变向下传播到元素层次结构中。
例如,如果您以这种方式定义CSS样式:
div.main_news *
{
/* ... */
}
这将是自找麻烦。我建议您通常使用尽可能小的范围来定义CSS样式,这对于某些技术来说是足够的。
一种可能的解决方法是:每个子模块首先重置其顶级层次结构元素的所有样式,例如:
div.news_container
{
/* Reset styles */
}
因此,您现在可以在模块上工作,从而确保某些父元素中的更改将在您的边界上停止。
更新:关于带有UID的div。如果你指的是Facebook,我不确定你指的是什么UID。只有隐藏的输入有一些长的隐含的ID作为它们的值(主页,没有登录),但这可能是框架出于某种原因自动生成这些值的结果。我曾经为helpers编写了一些代码(用于ASP.NET MVC),以便在应用程序范围内生成唯一的I(我想完全自动且透明地为我绑定带有I标签的复选框)。另一种情况是,有状态事件驱动框架(如ASP.NET WebForms)将生成的惟一ID作为支持其操作的要求。每个控件都必须有一些唯一的ID,这样才能在服务器端知道哪个元素在页面上引发了事件。此外,当您将元素拖放到表单中时,一些WYSIWYG编辑器会向元素添加自动ID。
抛开这些不谈,当然也可以使用一些预先构建的脚本来检查代码,并将唯一的is注入到标记和CSS代码部分。但是你真的需要确切地知道你在做什么和为什么要这样做。我个人认为,这种“唯一性”通常可以通过在团队中强制执行一些简单的规则来手动实现,而一些工作当然可以自动化,就像我上面描述的那样。
发布于 2010-03-04 17:47:27
根据我的经验,无论你如何努力标准化所有的东西,对于大团队来说,每个人都以同样的方式做同样的事情几乎是不可能的。
不要试图在“标准级别”或“如何”级别解决问题……在人的层面上,在管理层面上解决它。
我们使用几种技术来维护管理层的一致性:
我知道很多人不喜欢“管理”。他们认为这是额外的一层,什么也不做。好吧,那不是真的。管理有助于解决这样的问题。帮助与大型团队沟通,并对正在发生的事情有一个大致的看法……有很多“技术”来定义如何做事情的标准……当没有人员确保人们遵循、了解和遵循这些标准时,所有这些技术都会失败。
发布于 2010-03-10 00:54:06
命名空间冲突问题可以通过使用命名约定来避免。其他阅读:
简而言之:这取决于你的系统是如何构建的,但假设所有东西都是由模块组成的,然后给你的CSS标识符(或JS等)命名。如下: SiteName-ModuleName-Function。
如果您愿意使用您的应用程序语言(例如PHP)来干预CSS/JS代码,那么可以使用“任意”命名,方法是为每个模块分配其动态生成的数字id,并将该id附加到客户端语言对象的标识符。例如:
# PHP script
class module_articles {
public function __construct() {
$this->GUI = new view;
}
public function display_articles() {
// The CSS file is rendered first by the PHP engine and
// the identifiers name is constructed with the $this->GUI->id property.
$this->GUI->load_css('path/to/file.css');
}
}
class view {
private static $instance_number = 0;
public $id;
public function __construct() {
$this->id = ++ self :: $instance_number;
}
public function load_css($path) {
// $id can also be the CSS file path (slashes replaced with underscore)
// or the module name itself (e.g. module_articles)
$id = $this->id;
include $path;
}
}
最终,CSS文件应该是这样的:
/* CSS of module_articles */
<?php echo $id ?>author_name { /*...*/ }
<?php echo $id ?>article_date { /*...*/ }
注意:文件应该通过PHP的include关键字来包含!稍后使用Output Buffering输出它。
https://stackoverflow.com/questions/2360632
复制相似问题