在ASP.NET MVC中,我们需要为所有控制器使用后缀"Controller".这似乎是不必要的限制 - 有技术原因吗?
我大多只是好奇,但可以看到更灵活的命名规则可以改善代码组织的情况.难道不能使用反射来轻松地发现可能的控制器类来搜索Controller派生类吗?或者要求控制器类标有ControllerAttribute?
我越来越意识到我的代码在任何单个文件中都可以很容易地跨越数百行,虽然我知道实现可能是合理的,但它仍然感觉凌乱和无组织.
我知道有些情况下需要很多代码,但最好的方法是组织它们吗?
我已经考虑过从方法中分离变量,private从publics中分离变量internals但是我不想这样,因为我不禁想到ONE类的组件属于一个文件.
当我使用WPF窗口的代码隐藏时,整个事情变得更加复杂,WPF窗口似乎总是以指数速率迅速成长为一个巨大的混乱.
另外:C#有一个名为的关键字partial,它允许您在不影响功能的情况下将类拆分为任意数量的文件.但是,我注意到微软似乎只是partial用来隐藏你生成的代码(Winforms/WPF.)这让我质疑是否因为它有很多行而拆分一个类是合法的用法partial- 是吗?
谢谢
我正在编写一堆通用但相关的函数供不同的对象使用.我想对这些函数进行分组,但我不确定是否应该将它们放在一个类或简单的平面库文件中.
像类一样对待它们似乎并不正确,因为没有一种对象可以使用它们,并且包含所有这些函数的类可能不一定具有任何属性.
将它们视为平面库文件似乎过于简单,因为缺少更好的单词.
这是什么最好的做法?
场景:各种产品组成了较小的项目.dev,release和maintennace(bug/patch/minor release)中每个产品的几个不同版本.
大多数团队使用各种第三方工具和库来开发和发布(常见的两个是XUnit for dev,以及AutoMapper in product).他们是控制这些工具/库的版本的粉丝.
我似乎无法理解在mercurial中组织结构的最佳方法.在中央SVN风格中,我通过将第三方工具作为他们自己的项目进行组织,然后为可以获取其他项目的输出的项目创建小型构建,然后通过构建的发布项目来构建建成的项目.一切都在层次结构中,
(开发部门)
Root/dev/ProjectX/
Root/dev/ProjectY/
Root/dev/ThirdParty/XXX -- could be a 3rd party lib
Root/dev/ThirdParty/YYY -- could be a 3rd party lib
Run Code Online (Sandbox Code Playgroud)
(分支1)
Root/release1/ProjectX/
Root/release1/ProjectY/
Root/release1/ThirdParty/XXX
Root/release1/ThirdParty/YYY
Run Code Online (Sandbox Code Playgroud)
(分支2)
Root/release2/ProjectX/
Root/release3/ProjectY/
Root/release2/ThirdParty/XXX
Root/release2/ThirdParty/YYY
Run Code Online (Sandbox Code Playgroud)
等等
由于开发人员保持他们的机器最新(使用NUGET包管理器)的方式,第三方项目都必须在ThirdParty文件夹中以确保开发人员不必拥有这些的多个副本每个项目的图书馆.
我的问题是:
如果他们实现mercurial应该在这里实现一个simmilar策略(大回购)和克隆/分支,或者他们应该在项目级别分解存储库并克隆/分支这些.在后一种情况下,他们会有产品/版本分支/回购?我知道如果长期工作效果更好,他们更喜欢分布式模型,即使最初学习新工作流程的难度很大.
我已经阅读了http://nvie.com/posts/a-successful-git-branching-model/和一些文章,但我仍然不确定如何组织.
我正在构建一个项目,我遇到了以下问题:
我已经实现了几个子类,每个子类都有大约250行代码.从语义上讲,它们应该在同一个模块中一起使用,我想用它们导入它们
from mymodule import SubclassA, SubclassB
Run Code Online (Sandbox Code Playgroud)
但后来我的模块文件有数千行,这使得维护它的代码非常讨厌.现在我将每个类放在一个单独的文件中,以便于维护,但我必须像这样使用它:
from subclassa import SubclassA
from subclassb import SubclassB
Run Code Online (Sandbox Code Playgroud)
这没有任何意义,而且非常糟糕.
有没有优雅的解决方案?如果没有,上述哪个是更好的解决方案?
这是场景,我需要从多个Web服务服务调用返回的多个域对象中加载视图模型对象.将域模型对象转换为可消化视图模型对象的代码是一些相当复杂的代码.我想到的三个地方是:
要清楚,我不想使用AutoMapper或类似的工具.从最佳实践的角度来看,我想知道这个逻辑应该去哪里,以及为什么.
编辑
所以这就是我到目前为止所做的,这确实给了我"瘦"的控制器逻辑和关注点的分离.我怎么能让它更好呢?
// ** Controller **
public ActionResult Default()
{
var viewModel = MyViewModelBuilder.BuildViewModel(MarketType.Spot);
return View(SpotViewUrl, viewModel);
}
// ** Builder **
// Lives in MVC project under ViewModelBuilders folder
public class MyViewModelBuilder
{
public static ChartsModel BuildViewModel(MarketType rateMarket)
{
var result = new ChartsModel
{
RateMarket = rateMarket,
DateRange = new DateRange()
};
LoadGroupedRateLists(result, rateMarket);
LoadCoorespondingRates(result);
return result;
}
private static void LoadGroupedRateLists(ChartsModel model, RateMarket rateMarket)
{
var rateHistSvc = new RateHistoryService(RatesPrincipal.Current.Session.Token);
var serviceResult …Run Code Online (Sandbox Code Playgroud) 我不确定将几个模块包含在RSpec中的方法,所以让我来描述一下我的情况.
在app/helpers我有两个文件与助手,包含模块ApplicationHelper和MailersHelper.虽然这些是我在视图和邮件中使用的视图助手,但我也在我的测试中使用了一些方法,所以它们必须在describe子句中可访问.
在app/spec/mailers我下面还有一个包含模块的文件Helpers.该模块包含仅在测试中使用的方法(主要是长期望的包装方法).
另外,我有以下代码:
class Helpers
include Singleton
include ActionView::Helpers::UrlHelper
include ActionView::Helpers::NumberHelper
end
def helper
Helper.instance
end
Run Code Online (Sandbox Code Playgroud)
它的目的是使测试中的视图助手可用.目前,此代码位于Helper包装器方法之前的模块中,因为它们使用该Helper.instance方法.
我有三个邮件,我想测试.那么如何在测试中使所有这些东西都可以访问?
在每个邮件程序规范中直接使用include,如下所示:
require 'spec_helper'
describe MyMailer do
include ApplicationHelper
include MailersHelper
include Helpers
...
end
Run Code Online (Sandbox Code Playgroud)
在文件中helpers.rb我这样做:
require 'spec_helper'
module Helpers
include MailersHelper
include ApplicationHelper
...
end
RSpec.configure { |c| c.include Helpers }
Run Code Online (Sandbox Code Playgroud)
并在我使用的每个邮件规范中 require_relative './helpers'
和上面一样但不是包括ApplicationHelper与MailersHelper中Helpers …
什么是组织控制器的最佳方式.假设我有一个用户控制器和一个注册操作,我是否应该在我验证和处理数据的过程中执行process_registration操作,或者只是在注册操作本身内执行所有处理.我是否应对每个需要它的操作进行验证/处理操作(注册,进程注册等等)
我还注意到很多人都有模块和控制器,仅用于验证和处理信息,(我想将所有验证逻辑和规则保存在一个位置?)
我想我的问题是,事情需要分开多远?这个问题也适用于模型和视图.
我正在寻找在CodeIgniter中组织"结果对象类"的正确方法.这些类通常用于文档中描述的模型中:
您还可以将一个字符串传递给result(),它表示要为每个结果对象实例化的类(注意:必须加载此类)
$query = $this->db->query("SELECT * FROM users;");
foreach ($query->result('User') as $row)
{
echo $row->name; // call attributes
echo $row->reverse_name(); // or methods defined on the 'User' class
}
Run Code Online (Sandbox Code Playgroud)
那么,在哪里放置'用户'类,是否有任何'官方'的方式如何加载它?
我有一个简单的应用程序使用Angular UI路由器与一些状态.
其实我的路由器中有这种代码:
$stateProvider.state('map.layers', {
url: '/layers',
templateUrl: 'views/layers.html',
controller: 'LayersCtrl',
onEnter: function(map: Master.Map) {
// do stuff
},
onExit: function(map: Master.Map) {
// do stuff
}
});
Run Code Online (Sandbox Code Playgroud)
控制器在另一个文件中定义,我正在寻找一种在同一文件中定义onEnter和onExit回调的好方法.
在您看来,什么是最佳解决方案?一个全局变量应该可以工作,但它不是很漂亮.
php ×3
asp.net-mvc ×2
angular-ui ×1
angularjs ×1
branch ×1
c# ×1
code-reuse ×1
codeigniter ×1
coding-style ×1
libraries ×1
mercurial ×1
module ×1
namespaces ×1
oop ×1
partial ×1
python ×1
rspec ×1
ruby ×1
transform ×1
viewmodel ×1