我和一位同事为我们的客户设计了一个系统,我们认为我们创造了一个漂亮干净的设计.但是我遇到了一些我们引入的耦合问题.我可以尝试创建一个包含与我们的设计相同的问题的示例设计,但如果您原谅我,我将创建一个设计摘录来支持这个问题.
我们正在开发一种为患者注册某些治疗方案的系统.为了避免链接到图像,我将概念性UML类图描述为ac#样式类定义.
class Discipline {}
class ProtocolKind
{
Discipline;
}
class Protocol
{
ProtocolKind;
ProtocolMedication; //1..*
}
class ProtocolMedication
{
Medicine;
}
class Medicine
{
AdministrationRoute;
}
class AdministrationRoute {}
Run Code Online (Sandbox Code Playgroud)
我将尝试解释一下设计,协议是新治疗的模板.并且协议属于某种类型并且具有需要施用的药物.根据协议,对于相同的药物(以及其他事物),剂量可以不同,因此存储在ProtocolMedication类中.AdministrationRoute是药物的管理方式,与协议管理分开创建/更新.
我发现以下地方违反了得墨忒耳法则:
例如,在ProtocolMedication的业务逻辑中,存在依赖于药物的AdministrationRoute.Soluble属性的规则.代码将成为
if (!Medicine.AdministrationRoute.Soluble)
{
//validate constrains on fields
}
Run Code Online (Sandbox Code Playgroud)
列出某个学科中所有协议的方法将写成:
public IQueryable<Protocol> ListQueryable(Discipline discipline)
{
return ListQueryable().Where(p => (p.Kind.Discipline.Id == discipline.Id)); // Entity Frameworks needs you to compare the Id...
}
Run Code Online (Sandbox Code Playgroud)
我们使用ASP.NET(没有MVC)作为我们系统的接口,在我看来这个层目前有最严重的违规行为.gridview的数据绑定(必须显示协议的Discipline的列必须绑定到Kind.Discipline.Name),这是字符串,因此没有编译时错误.
<asp:TemplateField HeaderText="Discipline" SortExpression="Kind.Discipline.Name">
<ItemTemplate>
<%# Eval("Kind.Discipline.Name")%>
</ItemTemplate>
</asp:TemplateField>
Run Code Online (Sandbox Code Playgroud)
所以我认为实际的问题可能是,什么时候可以将其视为Demeter的建议,以及可以采取哪些措施来解决违反Demeter法的问题?
我对自己有一些想法,但我会将它们作为答案发布,以便他们可以单独评论和投票.(我不确定这是不是这样做的方法,如果没有,我会删除我的答案并将其添加到问题中).
如何通过rails中的Get方法传递参数数组?目前我的网址是这样的:
http://localhost:3000/jobs/1017/editing_job_suites/1017/editing_member_jobs/new?ids[]=1025&ids[]=1027
Run Code Online (Sandbox Code Playgroud)
如何使用Get方法传递数组但避免使用?ids[]=1025&ids[]=1027
.
使用javascript window.open方法发送请求.是否有任何解决方法发送不ajax Post请求.
我的Gitlab(第5版)没有发送任何电子邮件,我迷失了,试图弄清楚发生了什么.日志没有提供有用的信息.我把它配置为使用sendmail
.
我写了一个小脚本,通过ActionMailer发送电子邮件(我想这是gitlab用来发送电子邮件的,对吧?).它正确地发送电子邮件.
但是,在我的Gitlab上,我可以保证甚至不会调用sendmail.
我是否需要启用某些内容才能收到电子邮件通知?我该如何调试我的问题?
问题是我无法在任何地方找到任何信息.事情就是默默地失败了.我在哪里可以找到某种日志?log
dir中的日志不提供有用的信息.
我的问题是,如何使Gitlab更加冗长?我怎么能告诉我发生了什么?
我刚刚在该Background jobs
部分发现了很多邮件.很多未经处理的Sidekiq::Extensions::DelayedMailer
.这是什么意思?为什么这些工作没有得到处理?
我一直在搜索,似乎这是MS Access的一个限制,所以我想知道其他人在这个难题中找到了哪些创意解决方案.
如果您有一个连续的表单,并且您希望某个字段是特定于该行的选项的组合框,则Access无法提供; 组合框行源仅在表单的开头查询一次,因此显示表单其余部分的错误选项.
当然,我们所有尝试的下一步是使用onCurrent事件来重新查询组合框,这实际上限制了给定行的选项.但是,在这一点上,Access变得疯狂,并且为每一行重新查询所有组合框,结果通常是消失并在其他行中重新出现选项,这取决于他们是否选择了对于该行有效的选项.当前记录的行来源.
我找到的唯一解决方案是始终列出所有可用选项.那里有创意答案吗?
编辑此外,我应该注意组合框的原因是将查询作为查找表,需要隐藏和存储实际值,同时显示人类可读的版本...组合框行中的多个列资源.因此,将限制更改为列表没有帮助,因为不在当前行源查询中的id将不具有匹配的人类可读部分.
在这种特殊情况下,连续形式很有意义,所以请不要告诉我这是错误的解决方案.我要求任何有创意的答案.
VBA for Access缺少一个简单的Max(x,y)
函数来查找两个或更多值的数学最大值.我习惯于在基础API中已经有来自其他语言的这样的函数,例如perl/php/ruby/python等.
我知道可以做到:IIf(x > y, x,y)
.还有其他解决方案吗?
我尝试在2帧内做一些事情,但每当我尝试在帧之间切换时错误就会升高.例如:
# encoding: utf-8
require "capybara/dsl"
Capybara.run_server = false
Capybara.current_driver = :selenium
Capybara.app_host = 'https://hb.posted.co.rs/posted'
class Account
include Capybara::DSL
def check_balance
visit('/')
page.driver.browser.switch_to.frame 'main'
fill_in 'korisnik', :with => 'foo'
fill_in 'lozinka', :with => 'bar'
click_button 'Potvrda unosa'
page.driver.browser.switch_to.frame 'header'
click_on 'Stanje'
end
end
account = Account.new
account.check_balance
Run Code Online (Sandbox Code Playgroud)
错误是:
[远程服务器]文件:///tmp/webdriver-profile20120810-9163-xy6dtm/extensions/fxdriver@googlecode.com/components/driver_component.js:6638:在"未知"中:无法找到frame:main(Selenium :: webdriver的::错误:: NoSuchFrameError)
问题是什么?也许我在这里做错了什么?
如果我改变切换帧的顺序,那么首先尝试切换到'header'然后切换到'main'帧,然后相同的错误引发,除了它说这次没有'main'帧:
# encoding: utf-8
require "capybara/dsl"
Capybara.run_server = false
Capybara.current_driver = :selenium
Capybara.app_host = 'https://hb.posted.co.rs/posted'
class Account
include Capybara::DSL
def check_balance
visit('/')
page.driver.browser.switch_to.frame 'header'
click_on 'Stanje'
page.driver.browser.switch_to.frame …
Run Code Online (Sandbox Code Playgroud) 假设我有一个数组A = [1,2,3,4,5]
如何将所有元素与ruby相乘并获得结果?1*2*3*4*5 = 120
如果有一个元素0怎么办?我怎么能忽略这个元素?
我想找到我的应用程序的基本URL,所以我可以自动引用我的应用程序树中的其他文件...
因此,在我的应用程序的基础上给出一个文件config.php,如果子目录中的文件包含它,知道在url前加上什么.
application/config.php
application/admin/something.php
application/css/style.css
Run Code Online (Sandbox Code Playgroud)
因此,http://www.example.com/application/admin/something.php
如果访问它,我希望它能够知道css文件所在$approot/css/style.css
.在这种情况下,$approot
是" /application
"但我想知道应用程序是否安装在别处.
我不确定是否可能,许多应用程序(我认为是phpMyAdmin,Squirrelmail)必须先设置一个配置变量.如果它只是知道它会更加用户友好.
我正在编写一个迁移,将非rails应用程序转换为rails的正确格式 - 由于某种原因,其中一个表没有在id列上设置自动增量.有没有一种快速的方法可以在迁移过程中打开它,可能还有change_column
什么?
我有一个代表注册过程的模型,需要跟踪几个过程的进展(背景检查,访谈,信息收集......).每个都可以由状态机表示,然后注册的总体状态可能取决于其他状态.
aasm可以处理这个吗?还有其他想法或设计考虑吗?