我正在为新系统制作一个用例图.我想知道什么时候系统应该作为一个演示者包含在用例图中?
谢谢.
仅供讨论,对我而言,似乎有两种不同的术语实际上是在说同一件事.这两种设计方法之间是否有任何明显的差异?
我目前的用例非常简单,无论是可变的还是不可变的Map都可以解决问题.
有一个采用不可变Map的方法,然后调用第三方API方法,该方法也采用不可变Map
def doFoo(foo: String = "default", params: Map[String, Any] = Map()) {
val newMap =
if(someCondition) params + ("foo" -> foo) else params
api.doSomething(newMap)
}
Run Code Online (Sandbox Code Playgroud)
有问题的地图通常很小,最多可能有一个嵌入的案例类实例列表,最多几千个条目.因此,再次假设在这种情况下对于不可变的影响很小(即通过newMap val副本基本上有2个Map实例).
不过,它让我有点唠叨,复制地图只是为了得到一张新的地图,上面贴着几个k-> v条目.
我可以params.put("bar", bar)为我想要处理的条目变为可变等等,然后params.toMap为api调用转换为immutable,这是一个选项.但后来我必须导入并传递可变映射,与使用Scala的默认不可变映射相比,这有点麻烦.
那么,对于在不可变映射上使用可变映射的合理/良好实践的一般指导原则是什么?
谢谢
编辑 所以,看起来不可变地图上的添加操作接近恒定时间,确认@ dhg和@Nicolas断言没有制作完整副本,这解决了所呈现的具体案例的问题.
UML用例图允许两种看似等效的方式来表明给定的用例可能以几种不同的方式实现,即用例概括而不是用例扩展.我已经看到以下基本示例使用相同频率的任一方法建模,有时在单个源中.


在我看来,扩展是一种比一般化更弱的关系,因为基本情况的专用用例的直接替换必须是概括的,但不一定是扩展.
在我看来,泛化意味着需要多态实现,而扩展意味着要使用一些分支结构.
void makePayment(const PaymentDetails* pd)
{
pd->pay();
}
Run Code Online (Sandbox Code Playgroud)
而不是
void makePayment(const PaymentDetails* pd)
{
switch(pd->type)
{
case EFT:
payViaEFT(pd);
break;
case PAYPAL:
payViaPayPal(pd);
break;
case CREDITCARD:
payViaCreditCard(pd);
break;
}
}
Run Code Online (Sandbox Code Playgroud)
针对此类实现特定问题的建模是否过早的用例阶段?有更合适的UML图表.关于两者中的哪一个使用是否存在硬性规定?如果是,那么它是什么?
我有兴趣在一个项目中使用ZeroMQ,但我想听听其他人使用它的经验.我做了一些搜索,但发现只有mongrel2项目.您是否听说过其他使用它的项目?哪些公司在生产中使用ZeroMQ?
在用例图中,有什么区别<<includes>>,<<extends>>和<<uses>>?是<<includes>>和<<uses>>是一回事吗?
我们最近创建了一个网络应用程序,邀请当地的高中体育迷分享他们在当地体育赛事中最喜欢的时刻.
我们允许用户从他们的设备,Facebook和Instagram上传照片和视频.之后这些照片和视频由网络访问者投票,而举办"获胜时刻"的学校获得奖品.
Instagram拒绝了我们对api权限的请求.他们说这是一个无效的用例:"无效的用例:您的提交说明,截屏和网站中描述的用例不是我们在平台上允许的有效用例.请参阅我们的权限审核和有效用例说明欲获得更多信息."
我这样做了,它似乎是一个有效的用例,"帮助个人与第三方应用分享他们自己的内容".
..否则,请将我转到stackoverflow提问.也许我在我的应用程序中错误地解释了用例?
有谁知道为什么这个申请会被拒绝?..或者我如何更好地解释我们的用例,以便他们看到它是有效的并批准我们的请求?
我正在与一个团队开始一个项目,我们正在使用SCRUM作为方法论.这是我第一次使用SCRUM.我们列出了我们的功能,并制作了我们的故事(用户故事和技术故事以及他们的任务).
我有一个严格的UML方法来启动任何开发项目,对我来说,在列出所有功能之后,下一步是让用户案例图让每个人都看到应用程序要做什么以及谁将与之交互.但是我的团队表示没有兴趣在SCRUM中使用UML.
我可以使用UML的用户图来表示SCRUM中的用户故事吗?SCRUM中可以使用哪些其他图表?(这可能是一个愚蠢的问题'因为我无法想象没有类图或序列图的应用程序,但我真的想看到SCRUM专家的建议)
谢谢.
我需要一些建议,动态代理比常规代理更有用.
我已经投入了大量精力来学习如何有效地使用动态代理.在这个问题中,抛开像AspectJ这样的框架基本上可以执行我们尝试使用动态代理实现的所有内容,或者例如CGLIB可以用来解决动态代理的一些缺点.
是其他人吗?
public Object invoke(Object target, Method method, Object[] arguments) {
System.out.println("before method " + method.getName());
return method.invoke(obj, args);
}
}
Run Code Online (Sandbox Code Playgroud)
装饰器模式肯定是有用的,因为它允许所有代理方法的副作用(尽管这种行为是书籍 - 使用方面的例子..).
public Object invoke(Object target, Method method, Object[] arguments) {
if ("getValues".equals(method.getName()) {
// check or transform parameters and/or return types, e.g.,
return RangeUtils.validateResponse( method.invoke(obj, args) );
}
if ("getVersion".equals(method.getName()) {
// another example with no delegation
return 3;
}
}
Run Code Online (Sandbox Code Playgroud)
另一方面,合同只能避免实现完整接口的需要.然后,重构代理方法将无声地使动态代理无效.