devise师和开发者共同工作
WPF和Silverlight的丰富的performance能力意味着像我这样的开发者将会更频繁地与平面devise师密切合作,就像我的下一个项目一样。
有没有人有任何提示和经验(从这两个angular度)使这个更顺利?
例如,当我最近向devise师提及源代码控制时,我很快被告知不能获取控制graphics,图像等,所以这是浪费时间。 所以我回答:好吧,但是,WPF / Silverlight中的XAML文件呢?
Scott Hanselman在播客中谈到了这个话题,但是他更关注这些工具,而我更感兴趣的是沟通问题/方面。
我花了4个月的时间与一个与devise人员密切合作的项目,他还没有拿起CVS的基本概念(这不是我的源代码pipe理系统的select)。 我在这里说模板文件,JavaScript和CSS。 他并不愚蠢,只是其中的一件事情让他的工作变得更加困难,所以他完全拒绝承诺。
在我的情况下,我必须真正锤炼几乎所有的JavaScript都依赖于标记,当他将纯CSS,基于DIV的布局更改为基于表格的布局,而不告诉我,那么我所有的JS都会打破。
在项目进行过程中,我本人和devise师经常在相互之间相处融洽,在工作之余踢足球,对于我们各自的责任交stream非常激烈。 如果我不太了解他,那么我认为这会创造一个难以忍受的工作环境。 所以我认为,你们俩之间以及某个经理或者项目主pipe之间build立起来,对于项目期间双方的预期是十分重要的。
就我而言,最近几乎没有什么问题,因为CVS的情况已经被解决了,以及他不能随意改变标记的想法。 devise人员不是直接尝试创build模板文件并对其进行处理,而只是在静态文件上工作,而我的责任是将其插入到模板文件中。
这一切都是关于双方的沟通和一点妥协。
我发现的一件事情是,作为开发人员devise代码的方式会极大地影响devise人员的工作。 通常你从网上下载一个Silverlight或WPF示例应用程序,并在Blend中打开它,只是为了让Blend崩溃,因为代码在devise器中运行不好。 如果它不崩溃,它很less看起来像正在运行的应用程序。
我最近在Tech Ed澳大利亚和新西兰发表了一个关于可以应用于“可devise性devise”的技术的演讲。 包括一个简短的列表:
-
编写可以利用数据绑定的代码。 Model-View-ViewModel或表示模式非常适合这一点。
-
为您的服务依赖提供“devise时间”存根。 如果绑定的类使Web服务调用确保将Web服务客户端replace为一个存根类,该存根类返回devise器在混合中使用的“虚拟数据”。 这可以很容易地通过IoC和dependency injection完成,如果HtmlPage.IsEnabled == false,则注入一个实现。
-
通过使用数据绑定,您可以限制XAML文件中“命名元素”的数量。 如果你在你后面编写代码,最终将你的C#代码与命名的元素(如txtName或txtAddress)结合起来,使得devise者很容易“搞砸”。
-
使用命令模式而不是单击事件处理程序后面的代码。 通过从处理程序中松散地耦合事件的调用者,可以使用更less的命名元素,并且让devise者可以自由地selectbutton或菜单项来调用特定的命令。
-
在Blend中testing你的代码! 即使你认为自己是一个纯粹的开发者,你也应该testing你的代码是否可以被工具使用,并且努力在devise时获得最好的体验。 有人会认为,一个工具不应该影响你的软件devise,就像有人抱怨“可testing性的devise”,为了使代码更可testing而作出软件devise的决定。 我认为这是一个明智的做法,唯一的方法就是可以让一些真正的devise师和开发人员的工作stream程进行下去。
其他技巧是从小开始。 如果您的devise师是XAML,WPF和Silverlight的新手,那么首先将他们介绍给项目团队,让他们在他们所知的工具中进行一些基本的devise。 让他们在Adobe Illustrator中做一些button和插图,并将其导出到XAML,并向他们展示如何直接利用他们的devise资产。 继续介绍越来越多,希望他们有兴趣,并希望切换到混合。 这是一个相当的学习曲线,但它确实是值得的!
祝你好运!
PS:我在http://jonas.follesoe.no的博客上写了一些关于模式和devise师友好代码的书。; 您还可以find我的Tech Ed讲座的video录制的链接,以及大量的链接,以进一步阅读这个主题。
这可能有点偏离主题(我特别回答你关于源码控制和graphics的问题),但是你可以把二进制数据(图像等)放到源代码控制中(在我看来在很多情况下应该) – 它们只占用更多的磁盘空间,不能使用差异视图来分析以什么有意义的方式发生了变化,但是您所获得的是提交信息的历史logging,logging了每个修订版本,回滚能力以及轻松存档的能力(以SVN术语标记修订版)一起属于特定版本/版本的所有文件(无论是可视资源,文档,源代码,还是其他)。 您的构build系统只需从源代码控制中获取构build特定版本的软件所需的所有内容,也更容易。
参与早期devise和架构会议的平面devise师。
你想让他们去揭示错位的假设,build立一个合作的模式,而不是把事情从墙上来回扔。
最初设想专业devise师将在Expression Blend中工作,开发人员将在Visual Studio中工作,对一组共享的源文件进行更改。 虽然这当然是可能的(只要你经常检查你没有破坏其他开发者或devise工具的预期),开发者社区的许多成员,包括微软内部的一些成员,已经发现了保持Blend和Visual Studio项目活动的独特优势SEPARATE – 甚至可以手动将经过重新构build的Bleam生成的Xaml版本切割并粘贴到“官方”VStudio项目源代码中,而不是让devise人员和开发人员直接操作共享代码库。 微软在英国的用户体验团队发布了一个video,描述了他们试图协调devise师和开发人员在实际项目中所遇到的问题。
Real_World_WPF_DesignersAndDevelopersWorkingTogether
获得的主要经验教训之一是,您不能与完全不了解对方域名的devise师和开发人员合作。 开发人员需要熟悉Blend,他们可以为devise人员提供有用的UI shell以供devise人员进行修饰,而devise人员可以利用有用的数据“存根”来devise交互性,而devise人员需要对他们的开发问题有足够的了解不要做像删除控件一样的东西,并用自定义的视觉元素replace它们 – 没有意识到他们打破了与原始控件绑定的所有function。
微软对devise师/开发者工作stream程婚姻的看法在现实生活中似乎已经崩溃了。 我有一个相当大规模的WPF项目的工作经验,涉及2个专门的devise资源约4个月。 以下是微软似乎经常忘记的一些事实。
- devise师通常更喜欢使用Mac(我公司的devise师是100%的Mac – 0%的Windows)
- Blend不能在Mac上运行(就虚拟机解决scheme而言 – devise人员通常不喜欢像在外部操作系统中运行奇怪应用程序的怪异解决scheme)。
- devise师使用他们的工具 – Photoshop和Illustrator。 期。
- 今天的时间表的积极性通常不足以让devise师学习全新的应用/devise环境(如Blend)。
所以,考虑到上述情况,我注意到这是创造了一个新的工作types – 一个非常技术性的devise师或一个graphics开明的程序员。 基本上,可以采用原始forms(通常为.psd或illustrator格式)的devise资产,并根据需要将其应用于应用程序。
我原来是那个家伙(graphics开明的程序员)。 我花了很多时间从Illustrator文件导出XAML,在必要时手工清理它们,并使这些资源在Blend或VS中易于使用显示对象。 也有一些时候,我会采取一个devise元素,并重新使用混合绘制(通常当原始资产是位图为基础,它是更有意义的将其转换为向量)。
我的应用程序可能不是典型的 – 因为它是非常富有graphics丰富的,分辨率独立性是主要目标之一,因为它需要在多个分辨率和长宽比方面看起来不错(考虑到在今天的景观devise电视的困难 – 事情有在低分辨率的标清和高分辨率的高分辨率下都能看起来不错)。
总之,我认为WPF是一项非常棒的技术,绝对是迈向微软正确方向的一步。 然而,这并不是将devise师融入开发过程的最终解决scheme – 除非您重新定义了devise师的angular色。
我是Felix Corke,你提到的hanselman podcast的devise师,所以这里有几点来自真正的创意而不是开发者。
花了很长时间才开始使用开发工具 – 几年前我刚开始做xaml工作时,从来没有听说过Visual Studio,C#或任何types的源代码控制。 他们对我来说可能是Illustrator或3DsMax对你来说是陌生的。
我最大的一点是,devise师不能期望知道开发人员的做法 – 请准备好做大量的手工操作。 您不必学习任何新东西,而devise师将会成为应用程序开发的一个全新的可怕的一面。 我做了一些解决scheme和检查(现在仍然如此)。
令人高兴的是,我学会了成为一个专注于devise的集成商,而不是一个直截了当的创意,也许这是你需要包括在你的项目中的一个angular色。 这就是我为我们的美丽所做的插图,以及Mix中的怪胎 – devise师/开发者会议 – 如果你们任何一方太过分了,很难理解另一方是如何工作的,以及他们的angular色应该是什么。
很高兴回答任何具体问题!
ps你不需要源代码pipe理中的100Mb + .psd文件;)
我非常相信Integrator方法,这是我为了使WPF努力取得成功而必须执行的angular色。
Laurent Bugnion有一篇关于我所说的话的文章。 Robby Ingebretsen也是这种方法的忠实信徒。
但基本上,有人不得不掩盖开发者世界与devise师世界之间的“鸿沟”。 通常发生的事情是,这个人来自开发者世界或devise师世界。 如果他们来自开发者世界,那么他们可能是一个具有devise师倾向的开发者(他们负责外观和感觉,应用程序中的视觉效果,屏幕布局等)。 如果他们来自devise师的世界,那么他们就不怕代码,并且喜欢不时地潜水下来编码来获得那个animation或者任何shiny的东西。
然而,无论他们来自哪个世界,他们通常都必须build立以前从未有过的技能。 就我而言,我是一个热爱用户界面层的开发人员,因此我会说我是一个具有devise师倾向的开发人员。 为了弥补这个空白,并与我们的graphicsdevise师进行有效的对话,我不得不挑选一大堆devise师types的技能:学习使用Expression Design,XAM 3D等。
Shannon Braun最近在当地开发者大会上做了关于开发人员/devise师关系和社区发现工作stream程的演示。 我没有参加会议,但我认为他的幻灯片是关于这个问题的一个很好的讨论。
devise师们认为有权远离构build软件产品的整个工作的程度是一个需要解决的更大的问题。 不要让任何devise师expression的权利,不必知道他们的工作如何融入整体。
devise师社区中成长起来的那种严峻的专业化是软件开发行业面临的最大的工业成熟度问题之一。 这是一个专门化的程度,可预见地创造更多的返工和更长的周期时间。
对于开发者来说,如果没有意识到交互devise和实现的乐趣,情况也是如此。
极端专业化在生产力问题上始终是指数倍增。 通过采用促进学习文化的过程来组织解决这个问题。 这是大多数其他生产行业已经实现的成熟度水平,而且软件拖得很糟糕。
在开发工作stream的每个地方,在过度专业化,工作队列和缓冲区之间形成切换。 软件仍然是less数几个不认识到这是我们面临的最大问题之一的行业之一。 这在微软社区更加恶化,因为过度专业化似乎越来越正常,因为微软通过其工具和指导永远过度专业化。 除非你能够像微软那样在开发过程中浪费尽可能多的钱,否则你应该看看在stream量和生产力方面更好的方法。
因此,不能testing的开发者和不能编码的testing者是同样的工业不成熟的症状。
你不会从TFS的Scrum模板中学到这些。 微软在即使是最基本的forms上也能够在敏捷思维方面落后多年,而现在我们正在向精益思想迈进,微软将在距离尝试将精益思想整合到其产品线上三到五年。 不要等微软告诉你如何塑造一个团队和一个工作stream程。 您可以从微软最终将在几年内关注的人那里学到知识。
根据我的经验,除非(小)团队中的每个人都能够扮演这个angular色,否则集成者或“devsigner”angular色确实需要参与到这个过程中。 这是非常罕见的情况。 通常你会发现开发者非常擅长开发,但是在devise/可用性方面并不是很好,而且devise师对于美学/可用性很好,但是不想或者没有受过足够的编程。 有一个能跨越两个世界,“说出语言”的人是非常重要的。
集成商需要协调正在开发的控制与devise人员创build的devise资产。 在我们目前的项目中,我们有来自外部商店的6位活跃开发者和2位devise师。 我是这个项目的集成者,我大部分时间都在Expression Blend中工作。 开发人员主要在VS中创build符合我们产品规范的控件,而devise店正在devise最终产品的外观。 devise师正在使用Illustrator。 我的工作是获取Illustrator文件,并从中创build控制样式,然后将其应用到开发团队开发的控件中。 当我们转向混合3与原生支持PSD和AI文件,这个任务变得更容易。
从应用程序的主干创build一个单独的解决scheme,然后将您的ResourceDictionaries合并到主应用程序中,为应用程序创build“外观”将非常有帮助。 你可以得到正确的外观,而不会陷入不完全的控制。
自从你提到SL之后,我会假设你指的是RIA项目。
我曾经为Adobedevise和开发应用程序和服务,为其开发过一些RIA项目。
我可以给你提供最好的build议,基于我作为一个用户体验和视觉devise师14年的经验,虽然有一些编程经验,但与你们相比,却是可怜的。
接受你不会理解对方。
程序员认为,应该做什么function,devise师思考function应该如何performance。
对于开发者来说,一个button大多是通用的,对于devise者来说则不是这样。 devise师认为,在构图中,开发人员在框架中思考。
所以要学会了解你的责任是不同的。
开发人员需要考虑代码的通用性,不能把所有东西都看作是独特的,而且是硬编码的。 这是除非你能以某种方式自动化这种唯一性。
devise人员需要将应用程序或服务视为独特的东西。 这可能意味着一个button不是一个button。 可能有不同的尺寸或颜色或其他烦恼。
因此,请确保您与devise师build立良好的关系,承认您了解devise师的责任,并确保他理解您的devise。
并不是说你没有兴趣在世界上最好的应用程序。 只是这些devise决定中的一些需要相当长的时间。
确保你清楚地知道devise师应该如何交付给你,所以你不要浪费他或你自己的时间。 什么格式,资产? 命名?
所有涉及从一个范式到另一个范式的事物。
最重要的是沟通和尊重,他们不知道如何做JavaScript或如何理解CVS的基本思想。
大多数开发者,你不知道如何拯救他们的生命,什么是寡妇,如何最好地分层FireWorks或创build一个照片般逼真的图标,拿出一个好的口号或做一些可以理解的平均乔用4个字。 你不知道网格或alignment是什么,你往往会把东西变成绿色和紫色。
devise师应该明白,仅仅因为你处理编程并不意味着你是一个机器人,你不能有创造性的想法和解决scheme。 他还应该学习如何编程至less伪计划,以便他了解什么是你的项目。
最重要的是 不要开始辩论Mac与个人电脑:)项目已被取消,因为这一点。
坦率地说,你应该告诉devise师,图像可以,应该和“将放在源代码控制先生!” 🙂
它可能稍微不是常规的,你将无法进行合并或任何其他的性质,但会有修改和历史等。图像也可以embedded资源文件,进入源代码控制。
XAML可以(也应该)放在源代码pipe理中,作为标记文件,它将受益于所有的function。
就与devise师合作的提示而言,与您合作的那个人的提示让我感到恐惧,仅仅因为这个意见而已,所以这可能归结为您正在与之合作的世界卫生组织。 我会以一种很好的方式解释基本的最佳实践,并从那里开始。