我一直在研究一个不能再被描述为"小"的项目(40多个月),一个团队不再被定义为"小"(约30人).我们一直在使用敏捷/ Scrum(1)实践,并且使用健康剂量的TDD.
我不确定我是从敏捷还是TDD中选择了这个,更可能是两者的结合,但我现在显然是在那些把调试视为难闻气味的人的阵营中.通过'调试'我不是指更抽象的概念,即弄清楚系统可能出现什么问题,而是指在调试模式下运行系统的具体活动,逐步完成代码以找出其他难以理解的细节.
由于我相当确信,这个问题并不是关于调试是否是一种难闻的气味.相反,我想知道如何说服我的队友这个.
认为调试模式是"标准"模式的人倾向于编写只能通过调试才能理解的代码,这会导致浪费大量时间,因为每次你在其他人开发的代码之上处理项目时,你首先花费相当多的时间来调试它(并且,因为没有涉及到错误......这个术语变得越来越荒谬) - 然后就会出现孤岛.所以我很想说服我的一些队友避免调试模式是一件好事(2).但是,由于它们习惯于处于调试模式,因此它们似乎没有看到问题.对他们来说,花费数小时调试别人的代码,然后他们甚至开始做与他们的新项目相关的任何事情是常态; 他们没有看到任何错误.另外,因为他们花时间'搞清楚'
帮助我想出一个让他们脱离黑暗面的计划!
提前致谢.
(1)也称为SCRUM(全部大写).抛开资本化论点,我认为必须使用术语后的星号,因为 - 毫不奇怪 - 我们的组织"调整"敏捷和Scrum流程以适应所有利益相关方的感知需求.所以,老实说,根据理论,我不会假装这是100%,但这不是我的问题.
(2)是的,总是会有时候,我们就必须在调试模式下得到的,我不是要绝对避免,只是..试图尽量减少我们要深入到它的次数.
我有一个angularjs SPA网络应用程序,它使用ADAL-JS(和adal-angular).它设置为在MS Azure中对我们的公司AD进行身份验证.登录流程似乎正常,SPA收到id_token.
接下来,当用户单击按钮时,SPA会向我在AWS API Gateway上托管的REST API发出请求.我在Authorization: Bearer <id_token>标题上传递了id_token .API网关按预期接收标头,现在必须确定给定标记是否良好以允许或拒绝访问.
我有一个示例令牌,它在https://jwt.io/上正确解析但我到目前为止未能找到我应该用来验证签名的公钥或证书.我查了一下:
我想我应该使用https://login.microsoftonline.com/common/discovery/keys中密钥的x5c属性的值来匹配来自JWT id_token的kid和x5t属性(当前a3QN0BZS7s4nN-BdrjbF0Y_LdMM,这导致x5c值开始与"MIIDBTCCAe2gAwIBAgIQY ......").但是,https://jwt.io/页面报告"无效签名"(我也尝试用"----- BEGIN CERTIFICATE -----"和"----- END CERTIFICATE-"包装密钥值----").
另外,是否有一个(可能是python)库可以帮助验证给定的id_token,如上所述(这样我就不必自己去抓取签名密钥了?)...最好的我可以找到(ADAL for python)似乎没有提供此功能?
TL; DR:在我的ASP.NET MVC3应用程序中,我应该如何实现一个允许我在"子"实体列表的详细信息的同时编辑"父"实体的详细信息的视图?
更新:我接受了@ torm的答案,因为他提供了一个链接,可以解释为什么我当前的解决方案可能会有所改善.但是,如果有其他人有任何选择,我们很乐意听到!
我一直在寻找和阅读(到目前为止的一些调查结果,请参见底部的"参考文献"部分).然而,我仍然觉得到目前为止我找到的解决方案有点"臭".我想知道你们中是否有人有更优雅的答案或建议(或者可以解释为什么这可能会"变得如此好").提前致谢!
所以,这是设置:
public class Wishlist
{
public Wishlist() { Wishitems = new List<Wishitem>(); }
public long WishListId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public virtual ICollection<Wishitem> Wishitems { get; set; }
}
public class Wishitem
{
public long WishitemId { get; set; }
public string Name { get; set; }
public int Quantity { …Run Code Online (Sandbox Code Playgroud) 我正在开发一个Windows窗体应用程序(C#,.NET 4.0,VS 2010),其中我有一个非常标准的MainForm,带有ToolStrip(GripStyle:Hidden,Dock:Top,RenderMode:ManagerRenderMode).工具条包含一些基本项(ToolStripLabel,ToolStripSeparator,ToolStripSplitButton).
这呈现如下:

起初我只是想在工具条下面添加一个"底部"边框,但我也注意到这个工具条是用'圆角'渲染的(你可以在图像中看到右边的顶部和底部),以及垂直渐变线.
我怎样才能让这些角落不圆?
我试过了:
public class MainFormToolStripRenderer : ToolStripProfessionalRenderer
{
protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
{
base.OnRenderToolStripBorder(e);
var y = e.ToolStrip.Height-1;
e.Graphics.DrawLine(new Pen(SystemColors.ControlDark, 1), new Point(0, y), new Point(e.ToolStrip.Width, y));
}
Run Code Online (Sandbox Code Playgroud)
并通过this.toolStrip_Actions.Renderer=new MainFormToolStripRenderer();我的表单初始化连接它.
这给了我底部边框,但没有为圆角做任何事情.此外,添加底部边框,圆角更明显:

接下来,我尝试在上面的相同事件处理程序中绘制一个矩形,以尝试(至少)隐藏实心矩形边框后面的圆角和垂直渐变.这不起作用,因为可用的绘图区域(e.AffectedBounds)位于圆角边框内.
我还尝试将ToolStrip的RenderMode设置为System(而不是使用我的渲染器).在这种情况下,工具条角似乎适合(矩形),但工具栏中的拆分按钮似乎被打破(单击向下箭头不显示下拉列表),原因尚不明确,整体外观-feel有点平庸(相当平坦,直到你将鼠标悬停在工具条中的某些按钮上).
我想最后我宁愿坚持使用ManageeRenderedMode,也不想继承自Professional的自定义渲染器 - 但我需要摆脱圆角.其中,我发现这个SO Q似乎与我正在看的很接近,但没有给我一个答案.
提前致谢
我如何模拟DataServiceQuery以进行单元测试?
详细信息如下:想象一个ASP.NET MVC应用程序,其中控制器与ADO.NET DataService对话,封装了我们模型的存储(例如,我们将阅读Customers列表).通过对服务的引用,我们得到一个继承自DataServiceContext的生成类:
namespace Sample.Services
{
public partial class MyDataContext : global::System.Data.Services.Client.DataServiceContext
{
public MyDataContext(global::System.Uri serviceRoot) : base(serviceRoot) { /* ... */ }
public global::System.Data.Services.Client.DataServiceQuery<Customer> Customers
{
get
{
if((this._Customers==null))
{
this._Customers = base.CreateQuery<Customer>("Customers");
}
return this._Customers;
}
}
/* and many more members */
}
}
Run Code Online (Sandbox Code Playgroud)
财务主任可以是:
namespace Sample.Controllers
{
public class CustomerController : Controller
{
private IMyDataContext context;
public CustomerController(IMyDataContext context)
{
this.context=context;
}
public ActionResult Index() { return View(context.Customers); }
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我使用了一个接受IMyDataContext实例的构造函数,以便我们可以在单元测试中使用mock:
[TestFixture]
public class …Run Code Online (Sandbox Code Playgroud)