小编Nat*_*ing的帖子

DDD和MVC:'模型'和'实体'之间的区别

我对MVC中"模型"的概念感到非常困惑.今天存在的大多数框架将模型放在Controller和数据库之间,而模型几乎就像数据库抽象层.随着Controller开始做越来越多的逻辑,'Fat Model Skinny Controller'的概念就丢失了.

在DDD中,还有域实体的概念,它具有唯一的身份.据我了解,用户是实体的一个很好的例子(例如,唯一的用户ID).实体有一个生命周期 - 它的值可以在整个动作过程中改变 - 然后它被保存或丢弃.

我上面描述的实体是我认为模型应该在MVC中的内容?我有多偏离基础?

为了使事情更加混乱,你会引入其他模式,例如Repository模式(可能会在其中放置一个Service).很清楚Repository如何与实体交互 - 它与模型有什么关系?

控制器可以有多个模型,这使得模型看起来像一个"数据库表"而不是一个独特的实体.

更新: 在这篇文章中,模型被描述为具有知识的东西,它可以是单数或对象的集合.所以听起来更像是一个实体,一个模型或多或少都是一样的.模型是一个包罗万象的术语,其中实体更具体.值对象也是一个模型.至少在MVC方面.也许???

所以,从非常粗略的角度来看,哪个更好?

没有"模特"真的......

class MyController {
    public function index() {
        $repo = new PostRepository();
        $posts = $repo->findAllByDateRange('within 30 days');
        foreach($posts as $post) {
            echo $post->Author;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

或者这个,它有一个模型作为DAO?

class MyController {
    public function index() {
        $model = new PostModel();
        // maybe this returns a PostRepository?
        $posts = $model->findAllByDateRange('within 30 days');
        while($posts->getNext()) {
            echo $posts->Post->Author;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这两个例子都没有做我上面描述的内容.我很丢失.有什么输入?

php model-view-controller entity domain-driven-design model

53
推荐指数
3
解决办法
2万
查看次数

jQuery图像预加载/缓存暂停浏览器

简而言之,我有一个非常大的照片库,我试图在第一页加载时尽可能多地缓存缩略图.可能有1000多个缩略图.

第一个问题 - 尝试预加载/缓存那么多是愚蠢的吗?

第二个问题 - 当preload()函数触发时,整个浏览器停止响应一分钟到两分钟.此时回调会触发,因此预加载完成.有没有办法实现"智能预加载",在尝试加载这么多对象时不会妨碍用户体验/速度?

$.preLoadImages功能来自这里:http://binarykitten.me.uk/dev/jq-plugins/107-jquery-image-preloader-plus-callbacks.html

这是我实现它的方式:

$(document).ready(function() {
    setTimeout("preload()", 5000);
});
function preload() {
    var images = ['image1.jpg', ... 'image1000.jpg'];
    $.preLoadImages(images, function() { alert('done'); });
}
Run Code Online (Sandbox Code Playgroud)

1000张图片很多.我问得太多了吗?

jquery image image-preloader

11
推荐指数
1
解决办法
3620
查看次数

使用if ... else ...或者只是...来确定返回的内容

哪个更好?

function test($val = 'a') {
    if($val == 'a') {
        return true;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

要么

function test($val = 'a') {
    if($val == 'a') {
        return true;
    } else {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

实际上,他们做同样的事情.如果$val不是'a',则该函数返回false.只是个人喜好?

php if-statement

7
推荐指数
3
解决办法
1029
查看次数

在<HEAD>中有多少包含?

我已经对此做了一些搜索,但找不到任何形式的最佳实践或推荐 - 也许那是因为没有.我在我的网站上使用各种jQuery插件,除了TinyMCE和其他一些插件,以及我网站的特定JS文件.最重要的是,我有三个样式表......随着网站的增长,还有更多样式!

是否存在任何类型的"限制"或任何您应该注意包含标记中的脚本的内容?我知道每一个都是需要完成的另一个HTTP请求,但是如果它们都被缩小并且尽可能小,那么会出现问题吗?

    <link rel="stylesheet" type="text/css" href="http://mysite.com/assets/css/redmond.css" />
    <link rel="stylesheet" type="text/css" href="http://mysite.com/assets/css/style.css" />
    <link rel="stylesheet" type="text/css" href="http://mysite.com/assets/css/jqueryFileTree.css" />

    <!--[if gte IE 7]>
        <link rel="stylesheet" type="text/css" href="http://mysite.com/scripts/style.ie.css" />
    <![endif]-->

    <script type="text/javascript" src="http://mysite.com/assets/js/jquery.js"></script>
    <script type="text/javascript" src="http://mysite.com/assets/js/jquery-ui.js"></script>
    <script type="text/javascript" src="http://mysite.com/assets/js/jqueryFileTree.js"></script>
    <script type="text/javascript" src="http://mysite.com/assets/js/jqminmax.js"></script>
    <script type="text/javascript" src="http://mysite.com/assets/js/jquery.corner.js"></script>
    <script type="text/javascript" src="http://mysite.com/assets/js/jquery.jeditable.js"></script>
    <script type="text/javascript" src="http://mysite.com/assets/js/jquery.qtip.js"></script>

    <script type="text/javascript" src="http://mysite.com/assets/plugins/tinymce/tiny_mce.js"></script>

    <script type="text/javascript" src="http://mysite.com/assets/js/latitude.js"></script>
Run Code Online (Sandbox Code Playgroud)

javascript css xhtml

6
推荐指数
1
解决办法
3248
查看次数

将Massive列表传递给MVC3中的View

ASP.NET MVC的新手(现在使用带Razor的MVC3),我很困惑将一个对象从Controller传递给View.具体来说,我正在试验MVC3和Rob Conery有趣的Massive(http://blog.wekeroad.com/helpy-stuff/and-i-shall-call-it-massive).我正在搞一个博客作为一个简单的Web应用程序来试验.

HomeController.cs:

public ActionResult Index()
        {
            var table = new DynamicModel("mydb", tableName: "Posts");
            //grab all the posts
            var posts = table.All();
            ViewData["Posts"] = posts;

            return View();
        }
Run Code Online (Sandbox Code Playgroud)

这部分效果很好.但是我该怎么做?

return View(posts);
Run Code Online (Sandbox Code Playgroud)

如果我@posts.PostID在视图中引用,它会出错并说它无效.所以我尝试针对DynamicModel创建强类型视图,但posts仍然不存在.

我知道我可以创建一个ViewModel并针对该类型键入视图并将数据插入其中.这更多是关于理解Controller/View如何交互.

谢谢!

c# asp.net-mvc asp.net-mvc-3

6
推荐指数
2
解决办法
5786
查看次数

Control.PerformClick()没有做任何事情,我错过了什么?

我已经回顾了MSDN文档和几个SO答案,并且所有迹象都表明这有效.在这一点上,我想我完全误解了会发生什么,或者我错过了我需要的一行代码.

简而言之,我有一个带按钮的WinForms应用程序,我想要另一个功能在代码中的某一点"点击"该按钮.这是相关的部分:

// form.Designer.cs

this.btnAddBranch.Click += new System.EventHandler(this.btn_add_Click);
Run Code Online (Sandbox Code Playgroud)

// form.cs

// using statements
public partial class EditClient : Form
{
   // ...
   public TestClick()
   {
      //btnAddBranch.PerformClick(); <-- would like to know why this fails ...
      btn_add_Click(this, EventArgs.Empty);
   }
   private void btn_add_Click(object sender, EventArgs e)
   {
      MessageBox.Show("You clicked it!");
   }
 }
Run Code Online (Sandbox Code Playgroud)

注释行btnAddBranch.PerformClick()是我希望它会相当于它下面的行.但事实并非如此,它在TestClick()调用时似乎没有做任何事情.如果我执行未注释的行,它可以正常工作.

我错过了什么,还是我完全误解了什么?

c# winforms

6
推荐指数
2
解决办法
2万
查看次数

Laravel 4种子返回成功但数据库中没有任何内容

我正在使用Laravel 4并试图为一些用户播种数据库.我正在使用Zizaco Confide插件,所以我的User模型扩展ConfideUser而不是Eloquent文档.我也为模型添加了一些字段,但没有什么超级复杂的.我试过删除这些字段,但我得到同样的问题.

我创建了一个UserSeeder我调用的类,DatabaseSeeder然后运行php artisan migrate:refresh --seed.它运行时没有错误,并返回"数据库已被播种",除了每​​个表都是如此users.没有用户插入.我尝试过创建用户User::create(array(...))以及$user = new User ... $user->save()得到相同的结果.没有错误被转储,并且我在系统上找不到任何日志.如果我在UserSeeder-> run()方法中插入一些var_dumps,我会看到使用正确的值创建对象,但没有保存.

我错过了什么?这是一些代码示例,如果需要我可以提供更多:

型号\ user.php的:

<?php

use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableInterface;
use Zizaco\Confide\ConfideUser;

//class User extends Eloquent implements UserInterface, RemindableInterface {
class User extends ConfideUser
{
    // for Entrust
    use \Zizaco\Entrust\HasRole;

    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'users';

    /** …
Run Code Online (Sandbox Code Playgroud)

php mysql eloquent laravel-4

6
推荐指数
1
解决办法
3935
查看次数

更改时区而不更改DateTime对象的值

这是场景 - 我将PHP中的默认时区设置为UTC.我使用的所有日期/时间都设置为当前的UTC时间; 如果稍后显示,我会为该特定用户设置时区,并在其时区中显示日期.效果很好.

除了我有一个日期/时间,用户可以在表格上输入.它在24小时内以"YYYY-MM-DD HH:MM"形式出现(例如:"2014-09-18 17:00").用户自然将此时间设置为他们的时区,而不是UTC.

如果我使用输入值创建一个新的DateTime对象,它将以UTC格式保存,因此在稍后显示时会关闭几个小时(取决于原始时区).如果我在新对象上设置时区,它会改变该值,再次假设输入值为UTC.

我做了一些谷歌搜索,但没有发现任何关于PHP的问题(我找到了C#的几个答案).这可能与DateTime对象(或使用Carbon)有关吗?我是否坚持根据用户当前时区手动添加/减少小时数以将其置于UTC中?

php datetime date php-carbon

6
推荐指数
1
解决办法
4349
查看次数

PHP'instanceof'失败,类不变

我正在研究一个框架,我试图尽可能强烈地输入.(我在PHP中工作并从C#中学习了一些我喜欢的想法并试图在这个框架中使用它们.)我正在创建一个Collection类,它是域实体/对象的集合.它有点模仿List<T>.Net中的对象.

我遇到了阻碍我输入这个课程的障碍.如果我有一个UserCollection,它应该只允许User对象进入它.如果我有一个PostCollection,它应该只允许Post对象.

此框架中的所有集合都需要具有某些基本功能,例如添加,删除,迭代.我创建了一个界面,但发现我无法执行以下操作:

interface ICollection { public function add($obj) }
class PostCollection implements ICollection { public function add(Post $obj) {} }
Run Code Online (Sandbox Code Playgroud)

这打破了它对界面的依从性.但我不能强烈键入接口,因为所有集合都是相同的类型.所以我尝试了以下方法:

interface ICollection { public function add($obj) }
abstract class Collection implements ICollection { const type = 'null'; }
class PostCollection extends Collection {
 const type = 'Post';
 public function add($obj) {
  if(!($obj instanceof self::type)) {
   throw new UhOhException();
  }
 }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试运行此代码时,我得到syntax error, unexpected T_STRING, expecting T_VARIABLE or '$'instanceof声明.对该问题进行了一些研究,看起来原因的根源在于$obj instanceof self …

php oop strong-typing

5
推荐指数
1
解决办法
4680
查看次数

Razor引擎对我的内联代码不满意

此代码直接从Scott Gu的博客(http://weblogs.asp.net/scottgu/archive/2010/07/02/introducing-razor.aspx)复制:

Hello @name, the year is @DateTime.Now.Year
Run Code Online (Sandbox Code Playgroud)

当我尝试这个时,它的工作原理:

@foreach (var post in ViewBag.Posts)
{
    @post.Title<br />
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试这个时,代码突出显示器将整个事件作为一个Razor声明并且编译器失败:

@foreach (var post in ViewBag.Posts)
{
    @post.Title, by @post.Author<br />
}
Run Code Online (Sandbox Code Playgroud)

我得到Compiler Error Message: CS1525: Invalid expression term ','.再次,只是@post.Title<br />它编译得很好.

我在这里错过了什么?

c# razor asp.net-mvc-3

5
推荐指数
1
解决办法
1592
查看次数